我想将一个大约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未考虑各种错误情况
答案 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))