Using SQL Server datetimeoffset



我正在尝试存储工具中设置的会议的日期,时间和时区。我允许用户指定日期和时间以及从时区列表中进行选择。

我的问题是试图弄清楚如何获取所有 3 个部分并将其格式化为正确的存储datetimeoffset

我相信这是SQL Server需要datetimeoffset的格式:

YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm]

我的第一个问题是我的时区下拉列表的值应该是多少?

其次,SQL Server中是否有内置的方式来传递此数据字符串并将其转换为datetimeoffset所需的格式?

如果您的工具可以从时间转换为字符串,请将其转换为您包含的格式。[.nnnn]部分是纳秒。我还没有看到需要这种精度的应用程序。如果您对二级精度感到满意,datetimeoffset(0)就足够了。

例:

DECLARE @time_str varchar(30) = '2015-01-19 7:20:00 -08:00'
DECLARE @time datetimeoffset(0) = CONVERT(datetimeoffset, @time_str)
SELECT DATEPART(YEAR, @time),
       DATEPART(MONTH, @time),
       DATEPART(DAY, @time),
       DATEPART(HOUR, @time),
       DATEPART(MINUTE, @time),
       DATEPART(SECOND, @time),
       DATEPART(TZOFFSET, @time)

是的,DateTimeOffset 正是您想要的。

其次,可用偏移的选择列表应来自 ISO 列表 (http://en.wikipedia.org/wiki/List_of_tz_database_time_zones)

SQL Server 并不关心时区偏移量在现实世界中是否存在,它只需要有效。 下面是几个示例:

CREATE TABLE #tmp1 (dto DATETIMEOFFSET);
INSERT INTO #tmp1 ( dto ) VALUES  ( SYSDATETIMEOFFSET() ) --system timestamp
INSERT INTO #tmp1 ( dto ) VALUES  ( '2015-01-19 7:20:00 -08:00' ) --valid date, time, and offset
INSERT INTO #tmp1 ( dto ) VALUES  ( '2015-01-19 7:20:00 -08:16' ) --vaid date, valid time, made up offset that doesn't exist in the real world.
SELECT *
FROM #tmp1

最新更新