2017-08-23 12 views
0

Ich habe eine Tabelle, die eine VARCHAR-Spalte bevölkert mit Werten wieFehlerdatentyp varchar Umwandlung in numerische wenn Teilzeichenfolge Umwandlung in Dezimalzahlen

Mitarbeiter umfasst, ist nicht zu SSP berechtigt, weil ihre durchschnittliche wöchentliche Ergebnis unter LEL.Average Das Ergebnis sind : £ ich habe 44,13750

enter image description here

ich habe versucht, ich versuche, den Wert nach dem £ Zeichen zu extrahieren, so:

SELECT 
    ClientId 
    , Max(PayPeriod) As PeriodNo 
, CASE WHEN MAX(Comment) like '%£%' THEN 
    CAST(MAX(right(Comment, charindex('£', reverse(Comment))-1))AS DECIMAL(5,2)) 
    ELSE 0 END AS AvgEarnings2  
FROM 
    t_PayrollSSPEmployeeComment 
WHERE 
    comment like '%LEL%' AND comment like '%£%' 
     GROUP BY 
      ClientID 

Ich möchte nur den Wert abzurufen, so dass ich es wie 110.25

dezimal werfen kann, aber ich bin immer einen Fehler

Error converting data type varchar to numeric. 

ich den Wert mit oder ohne £ Zeichen bekommen können, aber ich muss es auf die richtige Anzahl von Dezimalstellen für einen Bericht umwandeln. Was mache ich hier falsch?

+1

Klingt wie Sie einige ungültige Zeichen im Zeichenfolgenwert haben. Vielleicht dein Komma? – ssn

Antwort

1

Können Sie dies versuchen, SUBSTRING Funktion kann verwendet werden, um die Nummer nach dem Zeichen £ zu extrahieren.

SELECT 
    ClientId 
    ,Max(PayPeriod) As PeriodNo 
    ,CASE WHEN MAX(Comment) like '%£%' THEN  
    CAST(SUBSTRING(MAX(Comment),2,LEN(MAX(Comment))) AS DECIMAL(18,2)) 
     ELSE 0 END AS AvgEarnings2  
    FROM t_PayrollSSPEmployeeComment 
    WHERE comment like '%LEL%' AND comment like '%£%' 
    GROUP BY ClientID 
+0

Danke, aber jetzt habe ich einen Fehler "Arithmetischer Überlauf Fehler beim Konvertieren von Varchar in Datentyp numerisch." –

+0

@OurManinBananas Kannst du versuchen mit 'DECIMAL (18,2)' aktualisierte Antwort, ich hoffe, dass Ihre Kommentarspalte keine anderen hat Zeichen als '£'. –

+0

Ich habe versucht, den gleichen Fehler, so muss die Zeichenfolge sorgfältiger überprüfen, alles wie Zeilenvorschub und so weiter strippen –

1

Wenn Sie SQL Server 2012 oder höher arbeiten, verwenden Try_Convert Funktion:

Try_Convert (Decimal(5, 2), MAX(right(Comment, charindex('£', reverse(Comment))-1))) 

und sehen, wohin Ihre Fehlercode den Ausdruck dezimal Typ nicht konvertiert wird, statt Fehler, wird das Ergebnis null sein und überprüfe das Problem mit diesem Wert.

Verwandte Themen