SQL Server本地时间转UTC存储失败求助:转换语句未生效
SQL Server本地时间转UTC时间解决方案
你的问题出在没有先将拼接后的本地时间绑定到对应的本地时区,直接使用AT TIME ZONE 'UTC'只会把拼接出的时间视为UTC时间,不会执行时区转换。
正确步骤
要完成本地时间到UTC的转换,需要三步:
- 拼接日期和时间得到无时区的本地datetime2
- 将该时间标记为本地时区的带时区时间(datetimeoffset类型)
- 转换为UTC时区时间
示例代码
假设你的本地时区是中国标准时间(UTC+8)(对应你给出的10:31转04:31的时差),代码如下:
-- 拼接本地日期和时间 DECLARE @LocalTime datetime2 = CONVERT(datetime2, CONVERT(varchar, @VitalReadingDate) + ' ' + CONVERT(varchar, @VitalReadingTime)); -- 转换为UTC时间 SELECT @LocalTime AT TIME ZONE 'China Standard Time' AT TIME ZONE 'UTC' AS UtcTime;
关键说明
- 第一个
AT TIME ZONE 'China Standard Time':告诉SQL Server“这个无时区的时间属于中国标准时区”,将其转换为带时区的datetimeoffset类型 - 第二个
AT TIME ZONE 'UTC':将带时区的时间转换为UTC时区的时间 - 如果你本地时区不是中国标准时间,替换为对应的时区名称(可通过
SELECT name FROM sys.time_zone_info查询所有支持的时区)
简化写法
也可以合并成一行:
SELECT CONVERT(datetime2, CONVERT(varchar, @VitalReadingDate) + ' ' + CONVERT(varchar, @VitalReadingTime)) AT TIME ZONE 'China Standard Time' AT TIME ZONE 'UTC' AS UtcTime;
内容的提问来源于stack exchange,提问作者ravi
相关产品推荐
相关产品推荐

