首页 > 解决方案 > 从字符串转换日期和/或时间时出现转换失败错误

问题描述

在我的表中,值保存为Thursday November 12, 2020 07:01. 我想将这些值转换为日期时间。这是我写的查询。

select  
 convert(varchar(200), replace(replace(replace(replace(replace(replace(replace(publishedon,'Monday',''),'Saturday',''),'Sunday',''),'Tuesday',''),'Wednesday',''),'Thursday',''),'Friday','')) 
from py_EconNext 

从值中删除日期后,我可以将值作为November 12, 2020 11:04. 之后我尝试将其转换为日期时间。将其转换为日期时间时,出现错误

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

但是当我运行选择如下

select  convert(datetime,convert(varchar(200),(' November 12, 2020  11:04'))) 

我可以毫无错误地获得这些值2020-11-12 11:04:00.000

表列数据类型 - varchar(200)

标签: sqlsql-servertsql

解决方案


问题是您的日期样式不一致,即(愚蠢地)存储为varchar. 这就是为什么将日期存储为 avarchar总是一个坏主意的原因。真正的解决方案是修复您的设计。

你可以用几个TRY_CONVERTs 来解决这个问题,前提是你的风格总是 mon dd, yyyy hh:mi:ssday, mon dd, yyyy hh:mi:ss。我正在使用样式代码109来明确样式代码mon dd yyyy hh:mi:ss:mmmAM (or PM)(请注意,它也很乐意接受 24 时钟):

SELECT ISNULL(TRY_CONVERT(datetime,V.YourString,109),TRY_CONVERT(datetime,STUFF(V.YourString,1,CHARINDEX(' ',V.YourString),''),109))
FROM (VALUES('Thursday November 12, 2020 17:01'),('Thursday November 12, 2020 07:01'),('November 12, 2020 07:01'))V(YourString)

推荐阅读