Хороший способ конвертировать строку в int - PullRequest
1 голос
/ 25 марта 2020

Есть ли лучший способ конвертировать NVARCHAR в INT на SQL сервере?

SELECT CONVERT(INT, CONVERT(FLOAT, N'5.0'))

Почему простые CONVERT или CAST вызывают ошибки ?

SELECT CONVERT(INT, N'5.0')
SELECT CAST(N'5.0 AS INT)

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Почему простые CONVERT или CAST вызывают ошибки?

Поскольку значение, которое вы пытаетесь преобразовать, имеет десятичную точку. И целые числа не имеют десятичных точек.

Вы можете обойти это, используя DECIMAL, а также числа с плавающей точкой:

SELECT CONVERT(decimal(10, 0), N'5.0')

DECIMAL принимает десятичные знаки (даже больше чем 1) и округляет значение до соответствующего целого числа, поэтому результат может быть больше или меньше входного значения.

Это имеет тот же диапазон, что и целое число, так что это довольно эквивалентно - и вы можете преобразовать назад:

SELECT CONVERT(int, CONVERT(decimal(10, 0), N'5.0'))

Обратите внимание, что они по-прежнему подвержены ошибкам переполнения, поэтому я рекомендую TRY_CONVERT().

1 голос
/ 25 марта 2020

Вы можете комбинировать функции try_convert и isnull вместе. try_convert вернет ноль, если не удастся преобразовать. И isnull будет использовать запасное значение, если первый аргумент равен нулю. Но большая часть этого будет использовать первый тип данных аргументов, поэтому конечный результат будет int, если использовать следующий код:

declare @text nvarchar(20) = N'5.6'

select isnull(try_convert(int,@text),convert(float,@text))

Fiddle

...