Відповіді:
Ви можете використовувати CAST або CONVERT :
SELECT CAST(MyVarcharCol AS INT) FROM Table
SELECT CONVERT(INT, MyVarcharCol) FROM Table
select CASE WHEN ISNUMERIC('x') = 1 THEN CAST('x' AS INT) ELSE 0 END
IsNumeric()
може дати певні викривлені результати. Він поверне TRUE для рядка "-.", Який все одно спричинить помилку при спробі ввести його до числа.
Також пам’ятайте, що при перетворенні з числового рядка, тобто '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
Починаючи з SQL Server 2012, ви можете використовувати TRY_PARSE або TRY_CONVERT .
SELECT TRY_PARSE(MyVarcharCol as int)
SELECT TRY_CONVERT(int, MyVarcharCol)
Спробуйте це, він працював для мене в Афіні:
cast(MyVarcharCol as integer)