1

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

我得到错误:

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

因为我可以运行选择,所以我知道所有的 dateString 格式都正确并且可以转换。那么为什么我不能通过更新来做到这一点呢?

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

感谢您对此的任何帮助,谢谢。

4

2 回答 2

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

于 2018-11-30T18:50:41.023 回答
0

简单的解决方案是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;
于 2018-11-30T19:22:29.583 回答