你能使SQL Server日期时间偏移量"nullable"吗?



我有一个API接收日期时间偏移,并存储在SQL Server的DateTimeOffset列中。但是,API的一些用户没有时区信息。

在这种情况下,系统将其视为UTC。

我有任何聪明的方法愚弄SQL服务器有可选/空的时区信息?

在这种情况下,如果有时区信息,我可以将其转换为localtime,或者如果没有时区信息,则只显示未修改的datetime。

您不能datetimeoffset数据类型中删除偏移量。一些解决方法:

  • 使用datetimeoffsetdatetime2列,根据输入是否包含时区信息填充其中一列或另一列

  • 使用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

结论是:不,不可能。

你必须另想办法解决这个问题。

相关内容

  • 没有找到相关文章

最新更新