在空值情况下将varchar转换为numeric

3

如果这个值为空,我该如何处理这个转换,以避免出现“将数据类型 varchar 转换为 numeric 时出错”的错误。

convert(numeric(19,2), mdmaster.check_no)as checkNbr,

谢谢。
2个回答

4
您可以使用 ISNULL 函数:
convert(numeric(19,2), ISNULL(mdmaster.check_no, 0))as checkNbr,

这将使任何NULL值被转换为0.00

这里是一个实时演示


这个正确吗?如果 mdmaster.check_no 是 NULL,那么你实际上有的是 convert(numeric(19,2), ''),它仍然会返回“将数据类型 varchar 转换为 numeric 时出错”。 - LittleBobbyTables - Au Revoir
@LittleBobbyTables - 抱歉,0 现在可以正常工作了。请查看我的修改。 - Mahmoud Gamal

2
您可以使用ISNUMERIC函数,如果为空,则返回0.00。
DECLARE @t VARCHAR(50);
SELECT convert(numeric(19,2), ISNUMERIC (@t))as checkNbr

如果符合您在MS SQL Server中的要求,您可以使用以下方法:

SELECT 
    CASE 
        WHEN Field NOT LIKE '%[^0-9]%'
        THEN CAST(Field AS INT)
        ELSE NULL 
    END

“ISNUMERIC”只需要一个参数,无论是哪种关系型数据库系统,是这样吗? - LittleBobbyTables - Au Revoir
我知道这一点,但是你使用了 ISNUMERIC (mdmaster.check_no, '')。你提供的参考文献显示只有一个参数,但你使用了两个。 - LittleBobbyTables - Au Revoir
@ Littlebobby,你是对的。我只是复制粘贴了你查询的一部分,并没有改变其余部分。你可以像Microsoft参考中那样使用它。 - Learning
在第一个例子中,“当输入表达式计算为有效的数字数据类型时,ISNUMERIC返回1。” 如果@t是数值型,则checkNbr为1.00,否则为0.00。我认为这也不起作用。 - Jeremy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接