2010-12-13 16 views
0

Ich habe ein Problem mit meiner Case-Anweisung. Hier ist ein Auszug aus meiner Tabellenstruktur:Fehler beim Konvertieren von varchar in numerisch

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

Und hier ist die CASE-Anweisungen, die mir Fragen sind zu geben:

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

Wenn selfrec nicht null ist, es zu versuchen, scheint die Saiten Umwandlung wie ‚Self Reconcilation: 'zu numerisch und offensichtlich fehlgeschlagen. Warum macht es das?

Danke.

+1

122 Fragen und nur 2 Stimmen. Ernst? –

Antwort

3

Führen Sie einfach die folgende Zeile:

select 'Self Reconcilation: ' + Invoices.total + ' - ' + Invoices.selfrec + ' = ' + Invoices.total - Invoices.selfrec 

Sie werden den Fehler. Sie versuchen, eine implizite Konvertierung eines numerischen Werts in ein Varchar durchzuführen.

Versuchen Sie Folgendes. Varchar (12) sollte für dezimal genügen (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)) 

Geben Sie (Nine + zwei, und eine für den ''):

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' 

Auch, warum nicht für den Test NULL zuerst. Die else-Klausel sagt effektiv "wenn nicht nicht null". :-)

+0

+1: Ich habe es gesehen und Sie haben mich dazu geschlagen. –

+0

Super, funktioniert perfekt. Vielen Dank! – Chris

+0

Keine Sorgen. Wenn es hilfreich war, könnten Sie es vielleicht ablehnen. –

4

Sie verlassen es, um einen Typ basierend auf einer Zeichenfolge und einem numerischen Wert abzuleiten. Geben Sie ihm einen Tipp:

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

Dann hat es die Auswahl von varchar und varchar, so dass es weiß dies ist varchar von Anfang an, und keine Fehler machen kann.

+0

Danke Kumpel, immer noch das Problem, obwohl – Chris

3

Es wird versucht, ' = ' usw. in numerische umzuwandeln, um die numerische Addition durchzuführen. Sie müssen CAST die numerische zuerst zu varchar.

Verwandte Themen