Почему простые 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()
.