Перетворити рядок в int за допомогою запиту sql


Відповіді:


297

Ви можете використовувати CAST або CONVERT :

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table

4
Як зафіксувати / запобігти виняток, коли одне з полів нечислове? Я б очікував, що вона перетвориться на 0.
Хлоя

40
Знайшов:select CASE WHEN ISNUMERIC('x') = 1 THEN CAST('x' AS INT) ELSE 0 END
Хлоя

9
Лише слово: IsNumeric()може дати певні викривлені результати. Він поверне TRUE для рядка "-.", Який все одно спричинить помилку при спробі ввести його до числа.
Curt

3
IsNumeric буде істинним для рядків з "-", лише якщо рядок є числовим, наприклад "-5" або "-20", він буде помилковим для рядків типу "5-", "-2-1". Отже, якщо isNumeric () вірно, тоді конверсія не повинна кидати жодного винятку
Пратюш Данука

11

Також пам’ятайте, що при перетворенні з числового рядка, тобто '56.72'в INT, ви можете зіткнутися з помилкою SQL.

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

Щоб обійти це, просто зробіть два перетворювачі наступним чином:

STRING -> NUMERIC -> INT

або

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

При копіюванні даних з TableA в TableB перетворення є неявним, тому вам не потрібно друге перетворення (якщо ви щасливі округлення до найближчого INT):

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

8

Починаючи з SQL Server 2012, ви можете використовувати TRY_PARSE або TRY_CONVERT .

SELECT TRY_PARSE(MyVarcharCol as int)

SELECT TRY_CONVERT(int, MyVarcharCol)

Однозначно не правильна відповідь на початкове запитання, оскільки це було відносно SQL Server 2005, але оскільки це 2019 рік і менше людей прив’язані до такої старої версії SQL Server, ця відповідь, безумовно, корисна.
shaune

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.