2013-06-05 5 views
1

Моего поля в моем СКЕ таблицеИспользование подстроки, в ISNULL в TSQL возвращает неожиданное количество символов для поля

(BI.dbo.SKU.phl5) является varchar(15)

Однако ниже кода возвращает только 3 символов 'Unc' для нулевых полей в моей таблице в то время как он должен вернуть 'Uncategorized'. Как это решить?

ISNULL(SUBSTRING(BI.dbo.SKU.phl5,0,3),'Uncategorized') AS phl1 
+0

Конечно, это возвращает только 3 символов, 'ISNULL' принимает два параметра и возвращает первый, если это не' NULL', в этом случае она возвращает второй. Поэтому, очевидно, если 'phl5' содержит« Без рубрики », вы вернете« Unc », так как ISNULL вернет результат подстроки. Пожалуйста, объясните логику того, что вы хотите (а не логика кода, логика «мышления», что вы хотите и почему) –

+0

@ LasseV.Karlsen Но phl5 не содержит «Без рубрики», что я делаю, это то, что, когда phl5 не является нулевым, верните первый 3 символа, если он равен нулю, верните «Без рубрики», я попробовал это с указанным выше кодом. Однако, когда он равен нулю, приведенный выше код возвращает 'Unc' – HOY

ответ

4
ISNULL(CAST(SUBSTRING(BI.dbo.SKU.phl5,0,3) AS VARCHAR(13)),'Uncategorized') AS phl1 

Размер типа возвращаемого SUBSTRING не четко документированы, что я могу найти, но проблема заключается в том, что тип ISNULL тип первого выражения, явно возвращающейся как VARCHAR (3), так как вы усекаете его до 3 символов.

ISNULL docs

0

Попробуйте

CASE WHEN BI.dbo.SKU.phl5 IS NULL THEN 'Uncategorized' 
    ELSE SUBSTRING(BI.dbo.SKU.phl5,0,3) 
END AS phl1