我有一个API接收日期时间偏移,并存储在SQL Server的DateTimeOffset
列中。但是,API的一些用户没有时区信息。
在这种情况下,系统将其视为UTC。
我有任何聪明的方法愚弄SQL服务器有可选/空的时区信息?
在这种情况下,如果有时区信息,我可以将其转换为localtime,或者如果没有时区信息,则只显示未修改的datetime。
您不能从datetimeoffset
数据类型中删除偏移量。一些解决方法:
-
使用
datetimeoffset
和datetime2
列,根据输入是否包含时区信息填充其中一列或另一列 -
使用
datetime2
存储输入的日期时间部分,varchar(6)
存储时区偏移量(如果存在)。 -
使用
at time zone
将输入转换为特定的时区,并将结果存储为datetimeoffset
。下面是一个例子:
select cast('2022-01-01 12:00:00 -05:00' as datetimeoffset); -- 2022-01-01 12:00:00 -05:00
select cast('2022-06-01 12:00:00 -04:00' as datetimeoffset); -- 2022-06-01 12:00:00 -04:00
select cast('2022-01-01 12:00:00' as datetime2) at time zone 'Eastern Standard Time'; -- 2022-01-01 12:00:00 -05:00
select cast('2022-06-01 12:00:00' as datetime2) at time zone 'Eastern Standard Time'; -- 2022-06-01 12:00:00 -04:00
结论是:不,不可能。
你必须另想办法解决这个问题。