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'