我的数据库中有一个表,该表同时具有原始用户输入日期字符串,然后尝试使用CONVERT从中获取日期时间
CREATE TABLE #UserInput
(
actualDate DATETIME NULL,
dateString VARCHAR(50) NULL
)
声明
SELECT CONVERT(DATETIME, dateString)
FROM #UserInput
工作正常,并将字符串正确转换为日期时间。
但是,当我尝试使用语句
设置actualDate
列时
UPDATE X
SET X.actualDate = CONVERT(DATETIME, X.dateString)
FROM #UserInput X
我得到了错误:
从字符串转换日期和/或时间时转换失败。
因为我可以运行select,所以我知道所有dateStrings的格式都正确,可以转换。那我为什么不能通过更新来做到这一点?
我正在测试的特定格式是mm / dd / yyyy hh:mm,但是该解决方案还需要处理其他格式。
谢谢您的帮助,
答案 0 :(得分:1)
CREATE TABLE #UserInput (
actualDate datetime NULL,
dateString varchar(50) NULL)
insert #UserInput(dateString) values('20181231 12:15')
SELECT CONVERT(datetime, dateString)
FROM #UserInput
UPDATE X
SET X.actualDate = CONVERT(datetime, X.dateString)
FROM #UserInput X
select * from #UserInput
我测试了两种格式的yyyymmdd hh:mm和mm / dd / yyyy hh:mm,此代码可以正常工作。我没有任何更新或选择运行错误。
答案 1 :(得分:0)
简单的解决方法是try_convert()
:
UPDATE X
SET X.actualDate = TRY_CONVERT(DATETIME, X.dateString)
FROM #UserInput X ;
我怀疑问题是您没有看到X
中的 all 行,只有少数匹配的行。要对此进行测试,请运行:
select X.*
from #userinput X
where try_convert(datetime, x.dateString) is null;