SQL Server 2008 возвращаемое значение сокращается при использовании ISNULL и NULLIF - PullRequest
8 голосов
/ 01 июля 2011

У меня есть это предложение выбора, где я проверяю, является ли номер телефона нулевым или пустым, и если они есть, я бы возвратил «Номер телефона не доступен». Как это

SELECT 
      Name, 
      ISNULL(NULLIF(Phone, ''), 'No Phone Number is available') AS Phone
FROM Person

Но когда номер телефона нулевой или пустой, я не получаю полный текст «Номер телефона недоступен». Только первые 20 символов возвращаются. Длина поля Phone также равна 20. Поэтому я думаю, что это возвращает текст в зависимости от длины поля Phone.

Есть ли способ исправить это без изменения длины поля?

1 Ответ

9 голосов
/ 01 июля 2011

Вы правы.

ISNULL использует тип данных и длину первого параметра.COALESCE принимает «наивысший приоритет».Итак:

COALESCE(NULLIF(Phone, ''), 'No Phone Number is available') AS Phone

Или

ISNULL(NULLIF(CAST(Phone as varchar(30)), ''), 'No Phone Number is available') AS Phone
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...