Почему RIGHT (@foostr, 0) возвращает NULL, если @foostr равен varchar (max)? - PullRequest
1 голос
/ 11 июня 2010

В SQL Server 2005

Если я хочу найти самый правый символ переменной varchar (max), нет проблем:

declare @foostr varchar(max)
set @foostr = 'abcd'
select right (@foostr, 1)

----
d

Если я хочу найти самые правые нулевые символы строкового литерала, нет проблем:

select right ('abcd', 0)

------------------

Возвращает пустую строку.
Если я хочу найти самые правые нулевые символы varchar (10), не проблема:

declare @foostr varchar(10)
set @foostr = 'abcd'
select right (@foostr, 0)

----

Возвращает пустую строку.
Если я хочу найти самые правые нулевые символы varchar (max), хорошо:

declare @foostr varchar(max)
set @foostr = 'abcd'
select right (@foostr, 0)

----    
NULL

Возвращает NULL. Почему?

Ответы [ 2 ]

4 голосов
/ 11 июня 2010

Я думаю, что это неопределенное поведение, как описано в документ RIGHT,

integer_expression

Это положительное целое число, которое указывает, сколько символов символьного выражения будет возвращено. Если integer_expression отрицательно, возвращается ошибка.

В нем не указано, что вернется, если оно равно 0.

0 голосов
/ 11 июня 2010

, 1 нет, 0, но все равно возвращает '' для меня

declare @foostr varchar(max)
set @foostr = 'abcd'
select right (@foostr, 1)

почему, 0 ????что должны означать самые правые нулевые символы?

RIGHT (character_expression, integer_expression) integer_expression Целое положительное число, которое указывает, сколько символов Character_expression будет возвращено.Если integer_expression является отрицательным, возвращается ошибка.Если integer_expression имеет тип bigint и содержит большое значение, символьное выражение должно иметь большой тип данных, например varchar (max).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...