Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将varchar转换为数值时出错_Sql - Fatal编程技术网

Sql 将varchar转换为数值时出错

Sql 将varchar转换为数值时出错,sql,Sql,我对我的案件陈述有异议。以下是我的表格结构的摘录: total = decimal(9,2) selfrec = decimal(9,2) 以下是给我带来问题的案例陈述: CASE WHEN Invoices.selfrec IS NOT NULL THEN 'Self Reconcilation: ' + Invoices.total + ' - ' + Invoices.selfrec + ' = ' + Invoices.total - Invoices.selfrec

我对我的案件陈述有异议。以下是我的表格结构的摘录:

total = decimal(9,2)
selfrec = decimal(9,2)
以下是给我带来问题的案例陈述:

CASE
    WHEN Invoices.selfrec IS NOT NULL 
    THEN 'Self Reconcilation: ' + Invoices.total + ' - ' + Invoices.selfrec + ' = ' + Invoices.total - Invoices.selfrec ELSE Invoices.total 
END AS 'total'
当selfrec不为null时,它似乎尝试将字符串(如“Self-reconction:”转换为数字),显然失败了。为什么要这样做


谢谢。

您将根据字符串和数字推断类型。给它一个提示:

ELSE CONVERT(varchar(30), Invoices.total)

然后它可以选择varchar和varchar,因此它从一开始就知道这是varchar,并且不会犯任何错误。

它实际上试图将
'='
等转换为数值,以便执行数值加法。您需要先将数值转换为varchar。

只需运行以下行:

select 'Self Reconcilation: ' + Invoices.total + ' - ' + Invoices.selfrec + ' = ' + Invoices.total - Invoices.selfrec 
你会得到错误。您正在尝试将数值隐式转换为varchar

尝试以下方法。Varchar(12)应该足以表示十进制(9,2)(9+2,1表示“.”)

给你:

CASE
    WHEN Invoices.selfrec IS NOT NULL 
        THEN 'Self Reconcilation: ' + cast(Invoices.total as varchar(12)) + ' - ' + cast(Invoices.selfrec as varchar(12)) + ' = ' + cast(Invoices.total - Invoices.selfrec as varchar(12))
    ELSE Invoices.total
END AS 'total'

另外,为什么不先测试NULL呢。else子句实际上是在说“if not null”。:-)

谢谢你,老兄,这个问题还有122个问题,只有2票。认真地
CASE
    WHEN Invoices.selfrec IS NOT NULL 
        THEN 'Self Reconcilation: ' + cast(Invoices.total as varchar(12)) + ' - ' + cast(Invoices.selfrec as varchar(12)) + ' = ' + cast(Invoices.total - Invoices.selfrec as varchar(12))
    ELSE Invoices.total
END AS 'total'