2010-12-13 33 views
0

私のケースステートメントに問題があります。ここに私のテーブル構造からの抜粋です:varcharを数値に変換中にエラーが発生しました

total = decimal(9,2) 
selfrec = decimal(9,2) 

そして、ここでは私に問題を与えているCASE文です:selfrecがnullでない場合は

CASE 
    WHEN Invoices.selfrec IS NOT NULL 
    THEN 'Self Reconcilation: ' + Invoices.total + ' - ' + Invoices.selfrec + ' = ' + Invoices.total - Invoices.selfrec ELSE Invoices.total 
END AS 'total' 

、そのような自己」のように文字列を変換しようとしているようですReconcilation: 'を数値に変換し、明らかに失敗します。なぜこれをやっているのですか?

ありがとうございました。

+1

122の質問と2つの票しかありません。真剣に? –

答えて

3

ただ、この行を実行します。

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)) 

あなたに与える(九+ 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節は効果的に 'not not not null'と言っています。 :-)

+0

+1:ちょうどこれを見て、あなたは私にそれを打ちました。 –

+0

素晴らしいです、完璧に動作します。ありがとう! – Chris

+0

心配はいりません。それが参考になった場合は、多分あなたはそれを投票することができます。 –

4

文字列と数値に基づいて型を推測するのは残しておきます。

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

が、それはvarchar型とvarcharの選択肢を持っているので、それが、これは最初からvarchar型で、任意のミスをすることはできませんを知っている:それをヒントを与えます。

+0

ありがとうございました。でも、まだ問題はあります。 – Chris

3

実際には' = 'などを数値に変換しようとしています。あなたはCASTに最初に数値をvarcharにする必要があります。

関連する問題