Col*_*lin 4 t-sql sql-server-2005 datetime-format
我有这种格式的DateTime varchar:2005-08-08T00:00:00 + 01:00.
编辑 这是一个总结答案,拼凑起来的其他人输入:
您可以将其转换为本地时间或utc,如下所示:
DECLARE @d VARCHAR(25)SET @d ='2007-08-08T00:01:00 + 01:00'SET @d ='2007-08-08T00:01:00-01:00'SET @d =' 2007-08-08T00:01:00 + 05:30'
选择@d作为输入,CONVERT(DATETIME,LEFT(@ d,19),126)AS LocalDate,DATEADD(MINUTE,-CAST((SUBSTRING(@ d,20,1)+ RIGHT(@ d,2))AS INT),DATEADD(HOUR,-cast(SUBSTRING(@d,20%,3)AS INT),CONVERT(DATETIME,LEFT(@d,19),126)))作为UtcDate WHERE @d LIKE' _ - - _T__ :: [+ - ] : '
结果:
Input LocalDate UtcDate
------------------------- ----------------------- -----------------------
2007-08-08T00:01:00+01:00 2007-08-08 00:01:00.000 2007-08-07 23:01:00.000
2007-08-08T00:01:00-01:00 2007-08-08 00:01:00.000 2007-08-08 01:01:00.000
2007-08-08T00:01:00+05:30 2007-08-08 00:01:00.000 2007-08-07 18:31:00.000
Run Code Online (Sandbox Code Playgroud)
在SQL Server 2008中,您可以使用datetimeoffset数据类型.
SELECT [Result] = CONVERT(datetimeoffset, '2005-08-08T00:01:00+01:00', 127)
Run Code Online (Sandbox Code Playgroud)
输出:
Result
----------------------------------
2005-08-08 00:01:00.0000000 +01:00
Run Code Online (Sandbox Code Playgroud)
在SQL Server 2005及更早版本中,您可以计算UTC日期和偏移量:
SELECT [LocalDate], [OffsetMinutes], [UtcDate]
FROM
(
SELECT [IsoDate] = '2007-08-08T00:01:00+01:00'
) A
OUTER APPLY
(
SELECT [LocalDate] = CONVERT(datetime, LEFT([IsoDate], 19), 126)
, [OffsetMinutes] =
CASE SUBSTRING([IsoDate], 20, 1)
WHEN '+' THEN +1
WHEN '-' THEN -1
END
* DATEDIFF(minute, 0,
CAST(SUBSTRING([IsoDate], 21, 5) + ':00' AS datetime))
WHERE [IsoDate] LIKE '____-__-__T__:__:__[+-]__:__'
) B
OUTER APPLY
(
SELECT [UtcDate] = DATEADD(minute, -[OffsetMinutes], [LocalDate])
) C
Run Code Online (Sandbox Code Playgroud)
输出:
LocalDate OffsetMinutes UtcDate
----------------------- ------------- -----------------------
2007-08-08 00:01:00.000 60 2007-08-07 23:01:00.000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26673 次 |
| 最近记录: |