将C# DateTime.Ticks转换为BigQuery DateTime格式的方法
将C# DateTime.Ticks转换为BigQuery DateTime格式的方法
嗨,这问题很常见,我来给你捋清楚怎么解决!
首先得明白C# Ticks的本质:它是从0001-01-01 00:00:00 UTC开始,以100纳秒为单位的累计计数。而BigQuery的时间函数刚好能直接基于这个起点做偏移计算,具体转换方法如下:
核心SQL转换语句
直接用BigQuery的TIMESTAMP_ADD和DATETIME函数组合就能搞定,把你的Ticks列代入即可:
SELECT DATETIME( TIMESTAMP_ADD( TIMESTAMP '0001-01-01 00:00:00', INTERVAL your_ticks_column * 100 NANOSECOND ) ) AS converted_utc_datetime FROM your_table_name;
几个要注意的点
- 为什么乘100? 因为1个C# Tick等于100纳秒,BigQuery的
INTERVAL ... NANOSECOND参数需要的是纳秒总数,所以必须做这个转换。 - 如果你的Ticks列存储的是字符串类型,记得先转成INT64:
CAST(your_ticks_column AS INT64),避免计算报错。
实际测试示例
用你给出的示例值638148714773184690来验证:
SELECT DATETIME( TIMESTAMP_ADD( TIMESTAMP '0001-01-01 00:00:00', INTERVAL 638148714773184690 * 100 NANOSECOND ) ) AS converted_datetime;
执行后会得到对应的UTC时间:2023-10-12 11:11:17.318469,和C#里DateTime.FromTicks(638148714773184690).ToUniversalTime()的结果完全一致。
备注:内容来源于stack exchange,提问作者Keyvan
相关产品推荐
相关产品推荐

