SQL SELECT с LEFT и LEN

У меня есть результат PRJ_NAME "Авторизации - XXXXXX-XXXXXX", но все, что мне нужно, это "Авторизации", поэтому я использую этот запрос с полным успехом.

SELECT  ISNULL(LEFT(PRJ_NAME, LEN(PRJ_NAME)-16),'') AS 'Folder Name'
FROM    MHGROUP.PROJECTS 
WHERE   PRJ_ID = '3626747'

Теперь, когда я использую следующий запрос с базовым соединением, я не могу использовать эту логику в этом запросе.

SELECT  m.[DOCNAME], 
        m.[SUBCLASS_ALIAS],
        u.FULLNAME,
        m.[CDATE3] as 'File Date',
        m.[DECLAREWHEN] as 'Declared',
        ISNULL(LEFT(p.PRJ_NAME, LEN(p.PRJ_NAME)-16),'') as 'Folder Name',
        m.ENTRYWHEN
FROM    ([Imanage].[MHGROUP].[DOCMASTER] as m (nolock)
JOIN    [Imanage].[MHGROUP].[DOCUSERS] as u (nolock) on u.USERID = m.OPERATOR), 
        [Imanage].[MHGROUP].[PROJECTS] as p (nolock), 
        [Imanage].[MHGROUP].[PROJECT_ITEMS] as i (nolock)
WHERE   i.ITEMTYPE = 'D' and
        i.ITEM_ID = m.DOCNUM and 
        i.PRJ_ID = p.PRJ_ID
ORDER BY u.FULLNAME, p.PRJ_NAME 

Я получаю следующую ошибку...

Сообщение 537, уровень 16, состояние 2, строка 2 Недопустимый параметр длины, переданный в функцию LEFT или SUBSTRING.

Кажется, я не могу понять, что может быть причиной этого. Любая помощь или руководство будет принята с благодарностью.


person NCollinsTE    schedule 06.11.2014    source источник


Ответы (1)


В столбце PRJ_NAME есть значение меньше 16 символов.

такая же ошибка наблюдается с простым запросом ниже

select LEFT('abc', LEN('abc')-16)

Проверьте, есть ли такое имя, и обработайте его оператором case.

case when len(PRJ_NAME) > 16 
     then LEFT(p.PRJ_NAME, LEN(p.PRJ_NAME)-16) 
     ELSE prj_name 
END
person radar    schedule 06.11.2014
comment
почему первый запрос не потерпит неудачу? Кроме того, я думаю, что ему вообще не нужно len, только left(prt_name,14) или, может быть, left(prt_name,len('Authorizations')) - person Beth; 06.11.2014
comment
@Beth, left(prt_name,len('Authorizations')) также завершится ошибкой, если prj_name меньше 16, то есть вообще не содержит авторизаций, какая-то неверная запись - person radar; 06.11.2014
comment
правильно, но он сказал, что использовал свой первый запрос с полным успехом. как это может произойти, если есть плохие (короткие) данные? - person Beth; 06.11.2014
comment
@beth, который работал для проекта с идентификатором 3626747, он проверен только для одной строки. - person radar; 06.11.2014
comment
@RADAR, это сработало как шарм. Спасибо. (Я серьезно иногда забываю просто смотреть за чертову коробку). - person NCollinsTE; 06.11.2014