将varchar转换为数字时出错
我的case语句存在问题。这里是我的表结构的摘录:将varchar转换为数字时出错
total = decimal(9,2)
selfrec = decimal(9,2)
这里是一个的给我的问题CASE语句:
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不为空,似乎试图将字符串,如“自我协调:'数字,显然失败。它为什么这样做?
谢谢。
只要运行该行:
select 'Self Reconcilation: ' + Invoices.total + ' - ' + Invoices.selfrec + ' = ' + Invoices.total - Invoices.selfrec
你会得到错误。您正试图将数值的隐式转换为varchar。
请尝试以下操作。 VARCHAR(12)应该足够小数(9,2)
select 'Self Reconcilation: ' + cast(Invoices.total as varchar(12)) + ' - ' + cast(Invoices.selfrec as varchar(12)) + ' = ' + cast(Invoices.total - Invoices.selfrec as varchar(12))
给你(九+二,和一个用于 ''):
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子句有效地说'如果不是不为空'。 :-)
+1:刚刚看到这个,你打败了我。 – 2010-12-13 11:54:32
真棒,完美的作品。谢谢! – Chris 2010-12-13 12:00:03
不用担心。如果它有帮助,也许你可以投票。 – 2010-12-13 12:10:43
您要让它根据字符串和数字来推断类型。给它一个提示:
ELSE CONVERT(varchar(30), Invoices.total)
那么它有VARCHAR和VARCHAR的选择,所以它知道这是从一开始就varchar和不能犯任何错误。
感谢哥们,仍然有问题,虽然 – Chris 2010-12-13 11:52:01
它实际上试图将' = '
等转换为数字以便执行数字加法。您首先需要CAST
数字到varchar。
122个问题,只有2票。真的吗? – 2010-12-13 11:56:14