在 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 转换为时间戳