Преобразовать строку в int с помощью SQL-запроса

169

Как преобразовать строку в целое число с помощью SQL-запроса на SQL Server 2005?

Рахул Вьяс
источник

Ответы:

298

Вы можете использовать CAST или CONVERT :

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table
CMS
источник
4
Как перехватить / предотвратить исключение, если одно из полей не числовое? Я ожидал бы, что это преобразуется в 0.
Хлоя
40
Нашел:select CASE WHEN ISNUMERIC('x') = 1 THEN CAST('x' AS INT) ELSE 0 END
Хлоя
9
Одним словом: IsNumeric()может привести к некоторым извращенным результатам. Он вернет TRUE для строки «-.», Что все равно вызовет ошибку при попытке привести его к числу.
Курт
3
IsNumeric будет истинным для строк с «-», только если строка числовая, например, «-5» или «-20», она будет ложной для строк, таких как «5-», «-2-1». Так что если isNumeric () имеет значение true, тогда преобразование не должно
вызывать
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
-2

Попробуйте это, это сработало для меня в Афине:

cast(MyVarcharCol as integer)
Ашутош Сингх
источник