将ISO-8601 varchar(0000-00-00T00:00:00+;00:00)转换为SQL中的日期时间

将ISO-8601 varchar(0000-00-00T00:00:00+;00:00)转换为SQL中的日期时间,sql,sql-server,datetime,iso8601,Sql,Sql Server,Datetime,Iso8601,如何将2019-07-01T00:00:00+05:30转换为SQL中的日期时间 2019-07-01T00:00:00+05:30是一个varchar字段。我需要将其转换为日期时间,以便将其与日期字段进行比较。 建议我将(2019-07-01T00:00:00+05:30)转换为日期时间的查询 select cast('2019-07-01T00:00:00+05:30' as Date) 转换为时间: select cast('2019-07-01T00:00:00+05:30' as T

如何将2019-07-01T00:00:00+05:30转换为SQL中的日期时间

2019-07-01T00:00:00+05:30是一个varchar字段。我需要将其转换为日期时间,以便将其与日期字段进行比较。
建议我将(2019-07-01T00:00:00+05:30)转换为日期时间的查询

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

不幸的是,当从
datetimeoffset
转换为date
datetime`时,SQL Server会截断时区信息。但是,您可以计算偏移量并将其添加回:

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日期匹配,因此您是安全的。我在世界的另一边,因此这在“西部”世界中是一个更重要的考虑因素(“西部”是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是varchar。。我需要将此转换为日期转换
convert
有什么问题?您对2019-07-01T00:00:00+05:30的预期值是多少?预期结果是什么<代码>2019-07-01 00:00:00或
2019-06-30 18:30:00