将 ISO-8601 varchar (0000-00-00T00:00:00+00:00) 转换为 SQL 中的日期时间
Convert ISO-8601 varchar (0000-00-00T00:00:00+00:00) to datetime in SQL
如何将 2019-07-01T00:00:00+05:30 转换为 SQL 中的日期时间?
2019-07-01T00:00:00+05:30 是一个varchar字段。我需要将其转换为 DateTime 以将其与日期字段进行比较。
建议我查询 Convert (2019-07-01T00:00:00+05:30) into DateTime
转换为日期:
select cast('2019-07-01T00:00:00+05:30' as Date)
转换为时间:
select cast('2019-07-01T00:00:00+05:30' as Time)
转换为日期时间:
select convert(datetime2, '2019-07-01T10:00:30+05:30',0)
试试这些..
select cast(convert(datetime2, '2019-07-01T10:00:30+05:30',0) as datetime)
select convert(datetime2, '2019-07-01T10:00:30+05:30',0)
一种选择是在没有时区部分的时间戳上使用 CONVERT
的组合,然后将 TODATETIMEOFFSET
与时区部分结合使用以获得最终结果:
WITH yourTable AS (
SELECT '2019-07-01T00:00:00+05:30' AS dt
)
SELECT
TODATETIMEOFFSET(CONVERT(datetime, LEFT(dt, 19), 126), RIGHT(dt, 6)) AS output
FROM yourTable;
这输出:
01/07/2019 00:00:00 +05:30
不幸的是,SQL 服务器在从 datetimeoffset
转换为 dateor
datetime 时截断了时区信息。但是,您可以计算偏移量并将其加回:
select dateadd(minute,
datediff(minute, convert(datetimeoffset, dt), convert(datetime, convert(datetimeoffset, dt))),
convert(datetime, convert(datetimeoffset, dt))
)
from (values ('2019-07-01T00:00:00+05:30')) v(dt);
对于您所在的特定时区,午夜日期与 UTC 日期一致,因此您是安全的。我在世界的另一边,所以这在 "western" 世界("west" 在 UTC 以西)中将是一个更重要的考虑因素。
以下查询会将给定的 VARCHAR 值转换为 DATETIME 值:
DECLARE @DateVal AS VARCHAR (30) = '2019-07-01T00:00:00+05:30';
SELECT CAST(REPLACE(SUBSTRING(@DateVal, 0, CHARINDEX('+', @DateVal)), 'T', ' ') AS DATETIME);
如何将 2019-07-01T00:00:00+05:30 转换为 SQL 中的日期时间?
2019-07-01T00:00:00+05:30 是一个varchar字段。我需要将其转换为 DateTime 以将其与日期字段进行比较。
建议我查询 Convert (2019-07-01T00:00:00+05:30) into DateTime
转换为日期:
select cast('2019-07-01T00:00:00+05:30' as Date)
转换为时间:
select cast('2019-07-01T00:00:00+05:30' as Time)
转换为日期时间:
select convert(datetime2, '2019-07-01T10:00:30+05:30',0)
试试这些..
select cast(convert(datetime2, '2019-07-01T10:00:30+05:30',0) as datetime)
select convert(datetime2, '2019-07-01T10:00:30+05:30',0)
一种选择是在没有时区部分的时间戳上使用 CONVERT
的组合,然后将 TODATETIMEOFFSET
与时区部分结合使用以获得最终结果:
WITH yourTable AS (
SELECT '2019-07-01T00:00:00+05:30' AS dt
)
SELECT
TODATETIMEOFFSET(CONVERT(datetime, LEFT(dt, 19), 126), RIGHT(dt, 6)) AS output
FROM yourTable;
这输出:
01/07/2019 00:00:00 +05:30
不幸的是,SQL 服务器在从 datetimeoffset
转换为 dateor
datetime 时截断了时区信息。但是,您可以计算偏移量并将其加回:
select dateadd(minute,
datediff(minute, convert(datetimeoffset, dt), convert(datetime, convert(datetimeoffset, dt))),
convert(datetime, convert(datetimeoffset, dt))
)
from (values ('2019-07-01T00:00:00+05:30')) v(dt);
对于您所在的特定时区,午夜日期与 UTC 日期一致,因此您是安全的。我在世界的另一边,所以这在 "western" 世界("west" 在 UTC 以西)中将是一个更重要的考虑因素。
以下查询会将给定的 VARCHAR 值转换为 DATETIME 值:
DECLARE @DateVal AS VARCHAR (30) = '2019-07-01T00:00:00+05:30';
SELECT CAST(REPLACE(SUBSTRING(@DateVal, 0, CHARINDEX('+', @DateVal)), 'T', ' ') AS DATETIME);