Przekonwertuj ciąg na int za pomocą zapytania sql


168

Jak przekonwertować ciąg znaków na liczbę całkowitą za pomocą zapytania SQL w programie SQL Server 2005?

Odpowiedzi:


297

Możesz użyć CAST lub CONVERT :

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table

4
Jak wychwycić / zapobiec wyjątkowi, gdy jedno z pól jest nienumeryczne? Spodziewałbym się, że zmieni się na 0.
Chloe,

40
Znalazłem to:select CASE WHEN ISNUMERIC('x') = 1 THEN CAST('x' AS INT) ELSE 0 END
Chloe,

9
Tylko słowo: IsNumeric()może przynieść pewne przewrotne skutki. Zwróci TRUE dla łańcucha „-.”, Co nadal będzie powodować błąd podczas próby rzutowania go na liczbę.
Curt,

3
IsNumeric będzie prawdziwe dla ciągów z „-” tylko wtedy, gdy łańcuch jest numeryczny, na przykład „-5” lub „-20”, będzie fałszywe dla ciągów takich jak „5-”, „-2-1”. Więc jeśli isNumeric () jest prawdziwe, to konwersja nie powinna rzucać żadnego wyjątku
Pratyush Dhanuka

11

Należy również pamiętać, że podczas konwersji z ciągu liczbowego, tj. '56.72'Na INT, możesz napotkać błąd SQL.

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

Aby to obejść, wykonaj dwie konwersje w następujący sposób:

STRING -> NUMERIC -> INT

lub

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

Podczas kopiowania danych z TableA do TableB konwersja jest niejawna, więc nie potrzebujesz drugiej konwersji (jeśli jesteś zadowolony z zaokrąglenia w dół do najbliższej INT):

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

8

Począwszy od SQL Server 2012, można użyć TRY_PARSE lub TRY_CONVERT .

SELECT TRY_PARSE(MyVarcharCol as int)

SELECT TRY_CONVERT(int, MyVarcharCol)

Zdecydowanie nie jest to dobra odpowiedź na pierwotne pytanie, ponieważ dotyczyło to SQL Server 2005, ale ponieważ jest rok 2019 i mniej ludzi jest przywiązanych do tak starej wersji SQL Server, ta odpowiedź jest zdecydowanie pomocna.
shaune

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.