如何安全地将varchar(255)转换为int?

时间:2015-11-24 20:41:33

标签: sql sql-server tsql

我在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

2 个答案:

答案 0 :(得分:4)

有很多方法可以从hasProduct转换为numeric,但是没有一种方法可供您使用(实际上,SQLServer2008令人失望,因为它缺少一些很酷的功能这几乎是必需的。)

在您的情况下,最好的方法是将数字表达式转换为varchar,如下所示:

varchar

它没有回答这个问题,但它解决了你的问题。

答案 1 :(得分:2)

使用TRY_PARSESQL Server 2012+):

SELECT ISNULL(TRY_PARSE(column_name AS INT),0)
FROM your_table;

<强> LiveDemo