Преобразование выполняется при проверке значения, например:
DECLARE @t varchar(100)
SET @t = (SELECT 'ABCA2')
SELECT @t
IF RIGHT(@t, 2) > 10
SELECT 'Hi'
ELSE
SELECT 'Bye'
Будет выдано сообщение об ошибке, поскольку SQL не может преобразовать A2 в целое число, не выдавая ошибку.
Однако, если вызамените @t
на:
SET @t = (SELECT 'ABC12')
Приведенный выше код будет работать, если преобразование выполнено успешно и можно выполнить сравнение.Правильная функция сама не преобразует вашу ценность.MSDN явно указывает тип возвращаемого значения RIGHT()
:
Возвращает varchar, когда символьное выражение является символьным типом данных, отличным от Unicode.
Возвращает nvarchar, когда символьное выражение является символьным типом данных Unicode.
Чтобы упростить себе задачу, полностью исключите функцию RIGHT()
, когда выполняется сравнение с текстом, например:
DECLARE @t varchar(100)
SET @t = (SELECT '1')
SELECT @t
IF @t < 10
SELECT 'Hi'
ELSE
SELECT 'Bye'
Обратите внимание, что я не звонилдо Right()
.Результатом вышеизложенного является отображение 1 и затем текста Hi.