将字符串转换为日期时间适用于 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;
我的数据库中有一个 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;