我在case表达式中使用了一个列,它在server1上工作正常。当我在server2上运行它时它失败了,因为该列的值为' false'在它。
该列是varchar(255),但在我的case表达式中,我使用它就好像它是INT类型一样。它运作良好,但现在它失败了,因为“假”' server2中的值。
如何安全地转换为INT,如果转换失败,则默认为0。
这可能吗?
我的查询如下:
UPDATE t1
set
c1 = ISNULL(
(
SELECT CASE c2
WHEN 123 then 'hello'
WHEN 234 then 'bye'
ELSE ''
END
)
, '')
FROM table1 as t1
答案 0 :(得分:4)
有很多方法可以从hasProduct
转换为numeric
,但是没有一种方法可供您使用(实际上,SQLServer2008令人失望,因为它缺少一些很酷的功能这几乎是必需的。)
在您的情况下,最好的方法是将数字表达式转换为varchar,如下所示:
varchar
它没有回答这个问题,但它解决了你的问题。
答案 1 :(得分:2)
使用TRY_PARSE
(SQL Server 2012+
):
SELECT ISNULL(TRY_PARSE(column_name AS INT),0)
FROM your_table;
<强> LiveDemo 强>