Unten Teil meiner Abfrage versagte zunächst:Was sind alle Werte, die ISNUMERIC-Funktion in SQL Server als TRUE findet?
WHEN ISNUMERIC(npx.nvcAnswer) = 1
THEN CASE
WHEN ABS(CONVERT(DECIMAL(38,2),npx.nvcAnswer)) < 1
THEN CONVERT(VARCHAR,CONVERT(DECIMAL(38,2),npx.nvcAnswer))
ELSE npx.nvcAnswer
END
Unterhalb der Fehler war, dass wir waren immer:
com.microsoft.sqlserver.jdbc.SQLServerException: Fehlerdatentyp nvarchar in numerische Umwandlung. rootCause = SQLException # 1: errorCode: 8114 sqlState: S0005 message: Fehler beim Konvertieren des Datentyps nvarchar in numeric.
Ich erkannte, dass es zu '.'
& '-'
als NUMERIC hält.
Also fügte ich "NOT npx.nvcAnswer in('.' , '-')"
hinzu und es funktionierte.
WHEN ISNUMERIC(npx.nvcAnswer) = 1 AND NOT npx.nvcAnswer in('.' , '-')
THEN CASE
WHEN ABS(CONVERT(DECIMAL(38,2),npx.nvcAnswer)) < 1
THEN CONVERT(VARCHAR,CONVERT(DECIMAL(38,2),npx.nvcAnswer))
ELSE npx.nvcAnswer
END
Nach einem Tag begann es wieder mit Fehler unten zu versagen.
com.microsoft.sqlserver.jdbc.SQLServerException: Fehler beim Konvertieren des Datentyps nvarchar in numerisch. rootCause = SQLException # 1: errorCode: 8114 sqlState: S0005 message: Fehler beim Konvertieren des Datentyps nvarchar in numeric.
Dann änderte ich unten Block und es funktionierte: (Aber ich nicht finden, welche Werte dieses Problem verursacht wurden)
OLD:
WHEN ABS(CONVERT(DECIMAL(38,2),npx.nvcAnswer)) < 1
THEN CONVERT(VARCHAR,CONVERT(DECIMAL(38,2),npx.nvcAnswer))
NEU:
WHEN ABS(CONVERT(DECIMAL(38,2),PATINDEX('%[^0-9]%', npx.nvcAnswer))) < 1
THEN CONVERT(VARCHAR,CONVERT(DECIMAL(38,2),PATINDEX('%[^0-9]%', npx.nvcAnswer)))
Fragen Sie:
Was sind alle Werte, die die ISNUMERIC-Funktion in SQL Server als TRUE findet?
zu lange Liste. I.e. Einige sind nur in bestimmten Kombinationen gültig, wie zum Beispiel "1d1". Sie sollten stattdessen, wie Sie es getan haben, eine Whitelist von Zeichen verwenden, von denen Sie glauben, dass sie gültig sind. 'ISNUMERIC' beantwortet die Frage, die niemand jemals stellen wollte -" kann diese Zeichenkette in * alle * der numerischen Datentypen umgewandelt werden (es ist mir egal * welcher * Typ (en), in den sie konvertiert werden kann)? " –