SQL:将varchar转换/解析为int或Zero(非NULL)的简单方法

时间:2018-04-13 12:47:37

标签: sql sql-server tsql

我想将一个大约11或12个字符的varchar值转换为整数值并用它做一些数学运算。

如果无法解析varchar,则在任何情况下返回值都应为0(零)。非空,不是错误。

这是我试过的:

SELECT CAST(NULL AS INT) -- NULL
SELECT CAST('' AS INT)   -- 0
SELECT CAST('42' AS INT) -- 42
SELECT CAST('abc' AS INT) -- Conversion failed when converting the varchar value 'abc' to data type int.

SELECT TRY_PARSE(NULL AS INT) -- Argument data type NULL is invalid for argument 1 of parse function.
SELECT TRY_PARSE('' AS INT)   -- 0
SELECT TRY_PARSE('42' AS INT) -- 42
SELECT TRY_PARSE('abc' AS INT) -- NULL

SELECT TRY_PARSE(ISNULL(NULL, '0') AS INT) -- 0
SELECT TRY_PARSE(ISNULL(NULL, '') AS INT)   -- NULL
SELECT TRY_PARSE(ISNULL(NULL, '42') AS INT) -- 42
SELECT TRY_PARSE(ISNULL(NULL, 'abc') AS INT) -- NULL

预期输出为

'0' --> 0
'' --> 0
'42' --> 0 42
'abc' --> 0

这很有效,但是嘿,这很丑陋:

SELECT ISNULL(TRY_PARSE(ISNULL(NULL, '0') AS INT), 0) -- 0
SELECT ISNULL(TRY_PARSE(ISNULL(NULL, '') AS INT), 0) -- 0 
SELECT ISNULL(TRY_PARSE(ISNULL(NULL, '42') AS INT), 0) -- 42 
SELECT ISNULL(TRY_PARSE(ISNULL(NULL, 'abc') AS INT), 0) -- 0

有没有使用过多包装方法调用的简单方法?

注意:SQL Server cast varchar to int未考虑各种错误情况

2 个答案:

答案 0 :(得分:2)

您可以使用try_convert() coalesce()函数来避免错误消息

select coalesce(try_convert(int, null), 0) -- 0   
select coalesce(try_convert(int, ''), 0) -- 0   
select coalesce(try_convert(int, '42'), 0) -- 42   
select coalesce(try_convert(int, 'abs'), 0) -- 0   

答案 1 :(得分:1)

不需要两个ISNULL()'

var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017'
var databaseName="mcart";

MongoClient.connect(url)
    .then(function (mongoClientInstance) {     
        var database = mongoClientInstance.db(databaseName);
        var x=database.collection("product_catalog").find().toArray();
        return x; 
    })
    .then(x=>console.log(x))
    .catch(err=>console.log(err))