Create a Date-formatted string from a datetime string in a query for Azure Stream Analytics
Azure Stream Analytics のクエリ内で DateTime フォーマットの文字列から Date フォーマットの文字列を生成する
Azure Stream Analytics で入力から出力にデータを受け渡す際に、入力データを加工して新たな列を作りたいことがあります。よくある例としては、いわゆる DateTime
型の文字列(yyyy-MM-ddTHH:mm:ss
) から Date
型の文字列 (yyyy-MM-dd
) を生成することが挙げられると思います。
しかしながら、 T-SQL 構文のサブセット である Stream Analytics クエリ言語 としては、 CONVERT 関数 をサポートしていないことに注意が必要です。
そこで、 Stream Analytics のクエリ内で上記を行いたい場合にどのような書き方ができるかを、以下に紹介します。
書き方
説明の前提として、 record.arrayvalue.time
から いわゆる DateTime
型のフォーマットの文字列を取得することができるものとします。
LEFT 関数
最もシンプルに記述することができます。
1 | LEFT(record.arrayvalue.time, 10) |
注意点としては以下の通りです。
record.arrayvalue.time
について、先頭の10文字が いわゆるDate
型のフォーマット (yyyy-MM-dd
) であること- これを満たさない場合、当然ですが、予期せぬ文字列が生成されます。
以下は気にしなくて構いません。
record.arrayvalue.time
が文字列であるかどうか- 数値であっても、エラーにはならず、文字列に変換して処理してくれます。
- そもそも文字列でなかったら
DateTime
型になりませんが。
- そもそも文字列でなかったら
- 数値であっても、エラーにはならず、文字列に変換して処理してくれます。
SUBSTRING 関数
LEFT
関数の別解です。
1 | SUBSTRING(record.arrayvalue.time, 1, 10) |
注意点等は LEFT
関数と同じです。
CONCAT または CONCAT_WS 関数
上記に挙げた方法と比較すると非常に冗長ですが、一つのやり方として示します。
1 | CONCAT_WS('-', |
他に以下のような書き方も可能です。
1 | CONCAT_WS('-', |
1 | CONCAT_WS('-', |
1 | CONCAT_WS('-', |
注意点としては、以下の通りです。
record.arrayvalue.time
について、いわゆるDateTime
型のフォーマット (yyyy-MM-ddTHH:mm:ss
) の文字列であること- エラーハンドリングのため
TRY
ではなくTRY_CAST
を使い、TRY
ではエラーになる状況でTRY_CAST
でNULL
にするようにしていますが、そもそもrecord.arrayvalue.time
がnvarchar(max)
にすらキャストできない何かだとしたら、使用している他の関数等でエラーになります。
- エラーハンドリングのため
まとめ
Azure Stream Analytics のクエリ内で、いわゆる DateTime
フォーマットの文字列から Date
フォーマットの文字列を生成する方法を 3つ紹介しました。
原則、 LEFT
関数を使うのが最も短くシンプルに記述できます。
もし Azure Stream Analytics への入力データが DateTime
フォーマットではない日付である可能性があるのであれば、 CONCAT_WS
関数を使ったやり方が良いケースもあるでしょう。
See also
- ISO 8601 - Wikipedia
- LEFT (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- SUBSTRING (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- CONCAT_WS (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- TRY_CAST (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- レプリケート (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- RIGHT (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- YEAR (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- MONTH (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- DAY (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- DATEPART (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn