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?

Rahul Vyas
źródło

Odpowiedzi:

297

Możesz użyć CAST lub CONVERT :

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table
CMS
źródło
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
Steven de Salas
źródło
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)
Örjan Jämte
źródło
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
-2

Wypróbuj ten, zadziałał dla mnie w Atenie:

cast(MyVarcharCol as integer)
ashutosh singh
źródło