Запрос возвращает сообщение об ошибке SQL 537 - PullRequest
2 голосов
/ 03 апреля 2012

В рамках проверки процесса ETL в настоящее время я пытаюсь реплицировать существующий запрос, в котором используется функция раздвигания URL-адресов в доменные и отдельные части

Мой запрос приведен ниже:

SELECT substring(Referrer , 1, patindex('%?%', Referrer) - 1) as URL
FROM dbo.tableA MRD
JOIN dbo.tableB mm
ON mm.MetId = MRD.MetId
AND mm.MetId = 4

Запрос возвращает набор результатов и ошибки.

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

Все еще изучает SQL, но поиск в Google заявляет: «Эта ошибка вызвана передачей отрицательного значения в параметр длины строковых функций SUBSTRING, LEFT и RIGHT»

Это потому, что у меня есть пустые поля URL, и если да, то как я могу изменить вышеуказанный запрос для компенсации?

1 Ответ

4 голосов
/ 03 апреля 2012

Возможно, что некоторые из ваших строк Referrer не содержат символ ?.

Если совпадений нет, PATINDEX вернет 0.

Тогда подстрокапытаться получить символы от 1 до -1 из строки реферера.

Возможно, вам понадобится обернуть оператор в оператор case с секундой, вызываемой PATINDEX, если кто-то не придумает более приятного обходного пути:

select 
    case patindex('%?%', Referrer)
       when 0 then Referrer
       else substring(Referrer , 1, patindex('%?%', Referrer) - 1) 
    end as URL
from dbo.tableA MRD
    JOIN dbo.tableB mm
      ON mm.MetId = MRD.MetId
        AND mm.MetId = 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...