【问题标题】:convert varchar yyyy-mm-dd T hh:mm to datetime2 in sql server在 sql server 中将 varchar yyyy-mm-dd T hh:mm 转换为 datetime2
【发布时间】:2021-10-29 10:25:47
【问题描述】:

如果varchar是2021-08-15T14:00:06Z格式,我可以用下面的代码进行转换

SELECT CONVERT(datetime2, '2021-08-15T14:00:06Z')

结果:2021-08-15 14:00:06.0000000

如果数据格式是yyyy-mm-dd T hh:mm

SELECT CONVERT(datetime2, '2021-08-15T14:03')

结果:

从字符串转换日期和/或时间时转换失败。

问题:如何将 varchar(50): yyyy-mm-dd T hh:mm 转换为 datetime2: yyyy-mm-dd hh:mm:ss.000

varchar(50): '2021-08-15T14:03' 预期结果:datetime2: 2021-08-15 14:03:00.000

【问题讨论】:

标签: sql-server datetime format


【解决方案1】:

该格式与 ISO8601 非常接近,因此使用它可能是最简单的...

declare @somedate char(16) = '2021-08-15T14:03';
select convert(datetime2, @somedate + ':00', 126);

或者只是剪掉“T”...

declare @somedate char(16) = '2021-08-15T14:03';
select convert(datetime2, replace(@somedate, 'T', ' '), 120);

【讨论】:

    【解决方案2】:

    如果格式是yyyy-MM-dd-THH:mm,只是另一种选择,您可以简单地连接秒数。

    SELECT CONVERT(datetime2, '2021-08-15T14:03'+':00')
    

    结果

    2021-08-15 14:03:00.0000000
    

    【讨论】:

    • 嗨加入,如果我在表中有日期列,当将此列从 Varchar(50) 转换为 datetime2 时,我仍然会收到错误消息。从表 A 中选择 CONVERT(Open_Date, +':00')。 (Open_Date是tableA中的列名) SQL版本:Microsoft SQL Server 2017
    • @Anson 作为一个 varchar,我怀疑数据是假的。而不是转换使用 try_convert(datetime2, open_date + ':00') 来识别虚假数据 try SELECT * from YOURTABLE WHERE try_convert(datetime2, open_date + ':00') 为空
    • @Anson 作为一个 varchar,我怀疑数据是假的。而不是转换使用 try_convert(datetime2, open_date + ':00') 来识别虚假数据 try SELECT * from YOURTABLE WHERE try_convert(datetime2, open_date + ':00') 为空
    • 嗨,约翰,从 tableA 中选择 try_CONVERT(Open_Date, +':00') 有效。谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多