Неверный параметр длины, переданный в функцию LEFT или SUBSTRING на Sql Server - PullRequest
4 голосов
/ 17 июня 2011

При попытке выполнить запрос ниже

Declare @t table (id int, string varchar(1000))

INSERT INTO @t (id, string)
SELECT 1, 'zxzzxx,ppppbppp,trtrtr,tyyt,hgghh,fefew,rewr,rwerer' 

;WITH test (id, lft, rght, idx)
AS 
(
        SELECT t.id
                ,LEFT(t.string, CHARINDEX(', ', t.string) - 1)
                ,SUBSTRING(t.string, CHARINDEX(', ', t.string) + 2, DATALENGTH(t.string))
                ,0
        FROM @t t
        UNION ALL
        SELECT c.id
                ,CASE WHEN CHARINDEX(', ', c.rght) = 0 THEN c.rght ELSE LEFT(c.rght, CHARINDEX(', ', c.rght) - 1) END
                ,CASE WHEN CHARINDEX(', ', c.rght) > 0 THEN SUBSTRING(c.rght, CHARINDEX(', ', c.rght) + 2, DATALENGTH(c.rght)) 
                        ELSE '' END
                ,idx + 1
        FROM test c 
        WHERE DATALENGTH(c.rght) > 0
)

select id, lft from test 

Я получаю сообщение об ошибке ниже

Msg 537, Level 16, State 2, Line 8
Invalid length parameter passed to the LEFT or SUBSTRING function.

но то же самое работает для SELECT 1, 'быстрый, коричневый, лиса, перепрыгнул, ленивый, собака'

Пожалуйста, помогите

Ответы [ 2 ]

3 голосов
/ 17 июня 2011

Кажется, что между вашими словами пропущен пробел.

В настоящее время вы ищете charindex, равный ', ', а не ','.

И строка не имеет соответствия', '.

2 голосов
/ 17 июня 2011

Это сообщение об ошибке обычно появляется при выполнении этих действий;

  • При использовании Подстрока , влево , вправо функции.

    Когда вы используете CharIndex (используется в поле, выбранное слово или слово поиск или длина символа быть неадекватным)

Возвращаемое значение возвращается каждому серверу в выражении запроса, результат транзакции 0 (ноль) возвращается, если возвращается ошибка -1

Это не приведет к ошибкам для сервера, возвращающим значение -1, или к сравниваемым объектам.

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