gpt4 book ai didi

sql - SQL Server 真的评估 case 表达式中的每个 'then' 子句吗?

转载 作者:行者123 更新时间:2023-12-04 05:00:23 25 4
gpt4 key购买 nike

我正在使用 99% 为数字的旧系统中的 ItemNumber 字段,但有一些记录包含字母。这些数字都用前导零填充,所以我想我只是将它们转换为 bigint 来解决这个问题,但是当它到达带有字母的记录时,当然会引发错误。

我认为以下 case 语句会起作用,但它仍然会引发错误。如果 isnumeric(itemnumber) = 1 条件不成立,为什么 SQL Server 会评估强制转换?

select case when isnumeric(itemnumber) = 1 
then cast(itemnumber as bigint)
else itemnumber
end ItemNumber
from items

最好的解决方法是什么?

最佳答案

您的表达式试图转换 VARCHAR值变成 BIGINT如果它是数字并保持原样,如果不是。

由于您在 CASE 中混合了数据类型声明,SQL Server试图将它们全部放入 BIGINT但在非数字值上失败。

如果您只想省略非数字值,请去掉 ELSE条款:

SELECT  CASE ISNUMERIC(itemnumber)
WHEN 1 THEN
CAST(itemnumber AS BIGINT)
END
FROM items

关于sql - SQL Server 真的评估 case 表达式中的每个 'then' 子句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16209307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com