和我一起玩这个,我不太会解释!
我正在尝试做一个简单的UPDATE
,将数据从dd / MM / yyyy转换为yyyy-MM-dd。但是我得到了错误:
从字符串转换日期和/或时间时转换失败
通常,这是一个非常容易调试的错误...
但是,在调试时,我决定从表中检索所有列以及最后的转换列...哪个工作正常?转换为列,返回所有行,没有问题:
SELECT
x.*,
CONVERT(date, x.[date], 103) test
FROM
table_name x
WHERE
import_date = (SELECT MAX(import_date) FROM table_name)
ORDER BY
part_num DESC
但这是我更加困惑的地方。如果我删除了x.*
引用并仅返回转换后的列,它将返回上面的错误消息。
我几乎可以肯定我很傻,而且我犯错的地方非常简单,但是有人可以帮忙吗?!
编辑:
如第一句话所建议,我按如下方式使用TRY_CONVERT()
。所有返回的“投放成功”:
SELECT CASE WHEN TRY_CONVERT(date, date,103) IS NULL
THEN 'Cast failed'
ELSE 'Cast succeeded' END FROM table_name WHERE import_date = (SELECT MAX(import_date) FROM table_name)
答案 0 :(得分:2)
大概是您的日期值错误。这可能会在被过滤掉的行中发生,这就是为什么有时会收到错误或不收到错误的原因-取决于执行过滤的方式。
只需使用以下方法找到错误的值
:SELECT date
FROM test
WHERE TRY_CONVERT(date, x.[date], 103) IS NULL AND x.[date] IS NOT NULL;