SQL Server中如何将带时区偏移的时间转换为无偏移的本地时间
实现方案
以下是基于SQL Server语法的简洁实现方式,完全不需要手动解析字符串或拆分日期部分:
场景1:将带偏移的太平洋时间转换为UTC时间(无偏移)
对应你给出的转换需求,直接叠加AT TIME ZONE 'UTC'即可实现:
SELECT GETDATE() AT TIME ZONE 'Pacific Standard Time' AT TIME ZONE 'UTC'
原理:第一次AT TIME ZONE得到带偏移的datetimeoffset类型太平洋时间,第二次AT TIME ZONE 'UTC'会自动将该时间转换为UTC时区的datetime2类型,自动完成偏移计算且无额外偏移后缀。
也可以用SWITCHOFFSET函数实现相同效果:
SELECT CAST(SWITCHOFFSET(GETDATE() AT TIME ZONE 'Pacific Standard Time', '+00:00') AS datetime2)
场景2:仅移除偏移后缀,保留太平洋本地时间
如果你不需要转UTC,只是想去掉偏移部分、保留加利福尼亚当地的时间数值,直接强转类型即可:
SELECT CAST(GETDATE() AT TIME ZONE 'Pacific Standard Time' AS datetime2)
该写法会直接提取datetimeoffset类型中的本地时间部分,输出无偏移的日期时间值。
以上两种方法均为SQL Server原生支持的语法,不需要额外自定义函数或字符串处理,性能和兼容性都有保障。
内容的提问来源于stack exchange,提问作者bvy
相关产品推荐
相关产品推荐

