在 sql server 中将 varchar yyyy-mm-dd T hh:mm 转换为 datetime2

Posted

技术标签:

【中文标题】在 sql server 中将 varchar yyyy-mm-dd T hh:mm 转换为 datetime2【英文标题】:convert varchar yyyy-mm-dd T hh:mm to datetime2 in sql server 【发布时间】: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

【问题讨论】:

这个链接可以帮助***.com/questions/41740356/… 【参考方案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') 有效。谢谢

以上是关于在 sql server 中将 varchar yyyy-mm-dd T hh:mm 转换为 datetime2的主要内容,如果未能解决你的问题,请参考以下文章

在没有科学计数法的 SQL Server 中将 float 转换为 varchar

在 SQL Server 2008 中将数据从浮点类型的 Excel 导入 varchar

在 SQL Server 存储过程中将 varchar 转换为 int 时出错

在 SQL Server 2008 R2 中将 varchar 转换为时间戳

在 SQL Server 中将 varchar 'hh:mm:ss' 转换为 datetime hh:mm:ss

在 sql server 中将 varchar yyyy-mm-dd T hh:mm 转换为 datetime2