SQL: Недопустимый параметр длины передан в функцию LEFT или SUBSTRING

Я получаю следующую ошибку при попытке выполнить следующий запрос:

«Недопустимый параметр длины передан в функцию LEFT или SUBSTRING»

select A.NUMBER,
       SUBSTRING(A.DESCRIPTION,
                 CHARINDEX(','+CAST(A.Description as VARCHAR(255)) + ',','from')+4, 
                 CHARINDEX(','+CAST(A.Description as VARCHAR(255))+ ',','to')- 1)
from  dbo.ACTIVITYM1 A
where A.DESCRIPTION like 'Reassignment from%' 

Детали схемы:

  • Activitym1: имя таблицы
  • Описание : Колонка
  • Номер : Колонка.

Пожалуйста, дайте мне знать, в чем причина этой ошибки.

A.Description содержит что-то вроде ниже

«Переназначение с PSM_Support на PPM_Support» Я пытаюсь получить PSM_Support в 1 столбце и PPm_Support в другом столбце.


person user4124978    schedule 09.10.2014    source источник
comment
Сообщение об ошибке довольно ясно. Вы указываете длину, выходящую за конец строки.   -  person Barmar    schedule 09.10.2014
comment
Третий аргумент SUBSTRING — это длина подстроки, а не конечная позиция. Так что вам, вероятно, нужно вычесть начальную позицию.   -  person Barmar    schedule 09.10.2014
comment
@Barmar - длина больше длины строки в порядке, select SUBSTRING('abcd',2,8000) возвращает bcd. Более вероятно, что длина оказалась отрицательной и вызвала ошибку.   -  person Damien_The_Unbeliever    schedule 09.10.2014
comment
Проверьте свои аргументы. CHARIDEX хочет, чтобы сначала выполнялся поиск текста, а затем второй. Я очень сомневаюсь, что вы найдете что-либо, содержащее две запятые (+ что бы там ни было в описании) внутри текстов from или to.   -  person Damien_The_Unbeliever    schedule 09.10.2014


Ответы (2)


Вот ваш substring разбитый:

SELECT SUBSTRING(
    A.DESCRIPTION,
    CHARINDEX(','+CAST(A.Description as VARCHAR(255))+',','from')+4, -- start
    CHARINDEX(','+CAST(A.Description as VARCHAR(255))+ ',','to')- 1  -- length
)

Я бы проверил третий параметр (длину), поместив его в отдельный столбец. Должно быть > 0.

person Code Different    schedule 09.10.2014

Вы неправильно поняли синтаксис CHARINDEX. Вы должны искать «от» или «до» в описании, но не описание в «от» или «до». Я надеюсь, что вы поняли проблему здесь. Просто переверните их, и вы получите это правильно.

person Ganesh Kodiganti    schedule 09.10.2014