sql - 从字符串转换日期和/或时间时出现转换失败错误
问题描述
在我的表中,值保存为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)
解决方案
问题是您的日期样式不一致,即(愚蠢地)存储为varchar
. 这就是为什么将日期存储为 avarchar
总是一个坏主意的原因。真正的解决方案是修复您的设计。
你可以用几个TRY_CONVERT
s 来解决这个问题,前提是你的风格总是 mon dd, yyyy hh:mi:ss
或day, 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)
推荐阅读
- laravel - 如何使用 Laravel Eloquont 搜索换行符文本
- jolt - 使用 JOLT 添加数组索引
- python - matplotlib.pyplot.hist 行为怪异
- antd - 在 Ant Design Form 中,如何对可以请求的验证器进行去抖动处理?
- javascript - GAS:将 Google Drive 中多个 Google Sheets 文档(工作簿)中的数据合并到一个工作簿中
- c# - 未找到在具有 C# 进程的特定用户下运行 powershell 的凭据
- javascript - 如何使用数据绑定从用户输入中获取值并使用 {{ ...}} 与内容进行多重播放
- javascript - 在 firebase 实时数据库 web 中写入数据
- java - 使用 Quarkus 和 Resteasy 在运行时定义客户端目标 URL
- kubernetes - Istio 安装成功但无法部署 POD