将字符串转换为日期时间适用于 select 但也不更新 (T-SQL)

Converting string to datetime works with select but nor update (T-SQL)

我的数据库中有一个 table 包含原始用户输入的日期字符串,然后尝试使用 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 

我收到错误:

Conversion failed when converting date and/or time from character string.

因为我可以 运行 select,所以我知道所有 dateString 的格式都正确并且可以转换。那么为什么我无法更新呢?

我一直在测试的具体格式是 mm/dd/yyyy hh:mm,但解决方案也需要处理其他格式。

非常感谢任何帮助,谢谢。

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 此代码工作正常。我没有收到任何更新错误或 select 运行.

简单的解决方案是try_convert():

UPDATE X 
    SET X.actualDate = TRY_CONVERT(DATETIME, X.dateString) 
    FROM #UserInput X ;

我怀疑问题在于您没有看到 所有 X 中的行——只有少数匹配。要对此进行测试,运行:

select X.*
from #userinput X
where try_convert(datetime, x.dateString) is null;