如何在Azure Stream Analytics中将DateTime转换为BIGINT?
在Azure Stream Analytics中转换System.Timestamp()为BIGINT或指定格式字符串
一、获取时间戳等效Ticks(BIGINT类型)
Azure Stream Analytics不支持直接将datetime类型强制转换为bigint,但可以通过DATEDIFF函数计算从0001-01-01 00:00:00(.NET DateTime的Ticks起始基准时间)到System.Timestamp()的间隔数,得到等效的Ticks值:
SELECT DATEDIFF(millisecond, '0001-01-01', System.Timestamp()) * 10000 AS TimestampTicks INTO [YourOutputSink] FROM [YourInputSource]
说明:
- .NET中1 Tick等于100纳秒,因此先计算毫秒级间隔再乘以10000,即可得到对应Ticks值
- 若仅需毫秒级时间戳(无需精确到Ticks),可直接使用:
SELECT DATEDIFF(millisecond, '1970-01-01', System.Timestamp()) AS TimestampMs INTO [YourOutputSink] FROM [YourInputSource]
二、生成yyyyMMddHHmmss格式的字符串作为唯一ID
有两种可靠实现方式:
方式1:使用FORMAT函数
SELECT FORMAT(System.Timestamp(), 'yyyyMMddHHmmss') AS UniqueId INTO [YourOutputSink] FROM [YourInputSource]
方式2:手动拼接日期时间组件(规避FORMAT的区域设置问题)
如果遇到FORMAT函数因区域配置导致的格式异常,可以手动拼接各时间部分确保格式准确:
SELECT CONCAT( RIGHT('0000' + CAST(YEAR(System.Timestamp()) AS VARCHAR(4)), 4), RIGHT('00' + CAST(MONTH(System.Timestamp()) AS VARCHAR(2)), 2), RIGHT('00' + CAST(DAY(System.Timestamp()) AS VARCHAR(2)), 2), RIGHT('00' + CAST(DATEPART(hour, System.Timestamp()) AS VARCHAR(2)), 2), RIGHT('00' + CAST(DATEPART(minute, System.Timestamp()) AS VARCHAR(2)), 2), RIGHT('00' + CAST(DATEPART(second, System.Timestamp()) AS VARCHAR(2)), 2) ) AS UniqueId INTO [YourOutputSink] FROM [YourInputSource]
内容的提问来源于stack exchange,提问作者Brian Vallelunga
相关产品推荐
相关产品推荐

