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?

Rahul Vyas
quelle

Antworten:

296

Sie können CAST oder CONVERT verwenden :

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table
CMS
quelle
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
Steven de Salas
quelle
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)
Örjan Jämte
quelle
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)
Ashutosh Singh
quelle