Konvertieren Sie eine Zeichenfolge mithilfe der SQL-Abfrage in int


168

Wie konvertiere ich eine Zeichenfolge mithilfe einer SQL-Abfrage unter SQL Server 2005 in eine Ganzzahl?

Antworten:


296

Sie können CAST oder CONVERT verwenden :

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table

4
Wie kann ich die Ausnahme abfangen / verhindern, wenn eines der Felder nicht numerisch ist? Ich hätte erwartet, dass es zu 0 konvertiert.
Chloe

40
Gefunden:select CASE WHEN ISNUMERIC('x') = 1 THEN CAST('x' AS INT) ELSE 0 END
Chloe

9
Nur ein Wort: IsNumeric()kann zu perversen Ergebnissen führen. Es wird TRUE für die Zeichenfolge "-." Zurückgegeben, was immer noch einen Fehler verursacht, wenn Sie versuchen, es in eine Zahl umzuwandeln.
Curt

3
IsNumeric ist für Zeichenfolgen mit "-" nur dann wahr, wenn die Zeichenfolge numerisch ist, z. B. "-5" oder "-20". Für Zeichenfolgen wie "5-", "-2-1" ist sie falsch. Wenn also isNumeric () wahr ist, sollte die Konvertierung keine Ausnahme
auslösen

11

'56.72'Beachten Sie auch, dass beim Konvertieren von einer numerischen Zeichenfolge, dh in INT, möglicherweise ein SQL-Fehler auftritt.

Conversion failed when converting the varchar value '56.72' to data type int.

Um dies zu umgehen, führen Sie einfach zwei Konvertierungen wie folgt durch:

STRING -> NUMERIC -> INT

oder

SELECT CAST(CAST (MyVarcharCol AS NUMERIC(19,4)) AS INT)

Wenn Sie Daten von Tabelle A nach Tabelle B kopieren, ist die Konvertierung implizit, sodass Sie die zweite Konvertierung nicht benötigen (wenn Sie gerne auf das nächste INT abrunden möchten):

INSERT INTO TableB (MyIntCol)
SELECT CAST(MyVarcharCol AS NUMERIC(19,4)) as [MyIntCol]
FROM TableA

8

Ab SQL Server 2012 können Sie TRY_PARSE oder TRY_CONVERT verwenden .

SELECT TRY_PARSE(MyVarcharCol as int)

SELECT TRY_CONVERT(int, MyVarcharCol)

Definitiv nicht die richtige Antwort auf die ursprüngliche Frage, da sie sich auf SQL Server 2005 bezog, aber da es 2019 ist und weniger Leute an eine so alte Version von SQL Server gebunden sind, ist diese Antwort definitiv hilfreich.
Shaune

-2

Probieren Sie dieses aus, es hat bei mir in Athena funktioniert:

cast(MyVarcharCol as integer)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.