Как проверить, является ли строка сервера Sql пустой или пустой
Я хочу проверить данные, но игнорировать его, если он пустой или пустой. В настоящее время запрос выглядит следующим образом:
Select
Coalesce(listing.OfferText, company.OfferText, '') As Offer_Text,
from tbl_directorylisting listing
Inner Join tbl_companymaster company
On listing.company_id= company.company_id
Но я хочу получить company.OfferText if listing.Offertext - это пустая строка, а также если она равна null.
Какое наилучшее решение?
Ответы
Ответ 1
Я думаю:
SELECT
ISNULL(NULLIF(listing.Offer_Text, ''), company.Offer_Text) AS Offer_Text
FROM ...
- самое элегантное решение.
И сломать его немного в псевдокоде:
// a) NULLIF:
if (listing.Offer_Text == '')
temp := null;
else
temp := listing.Offer_Text; // may now be null or non-null, but not ''
// b) ISNULL:
if (temp is null)
result := true;
else
result := false;
Ответ 2
SELECT
CASE WHEN LEN(listing.OfferText) > 0 THEN listing.OfferText
ELSE COALESCE(Company.OfferText, '') END
AS Offer_Text,
...
В этом примере, если listing.OfferText
равно NULL, функция LEN() также должна возвращать значение NULL, но это еще не > 0.
Обновить
Я узнал кое-что за 5 1/2 лет после публикации этого и сделаю это по-другому:
COALESCE(NULLIF(listing.OfferText,''), Company.OfferText, '')
Это похоже на принятый ответ, но также имеет откат в случае, если Company.OfferText
также является нулевым. Ни один из других текущих ответов, использующих NULLIF()
, также делает это.
Ответ 3
Select
CASE
WHEN listing.OfferText is null or listing.OfferText = '' THEN company.OfferText
ELSE COALESCE(Company.OfferText, '')
END As Offer_Text,
from tbl_directorylisting listing
Inner Join tbl_companymaster company
On listing.company_id= company.company_id
Ответ 4
Вот еще одно решение:
SELECT Isnull(Nullif(listing.offertext, ''), company.offertext) AS offer_text,
FROM tbl_directorylisting listing
INNER JOIN tbl_companymaster company
ON listing.company_id = company.company_id
Ответ 5
Вы можете использовать ISNULL
и проверить ответ на известный вывод:
SELECT case when ISNULL(col1, '') = '' then '' else col1 END AS COL1 FROM TEST
Ответ 6
В SQL Server 2012 у вас есть IIF
, например, вы можете использовать его как
SELECT IIF(field IS NULL, 1, 0) AS IsNull
Точно так же вы можете проверить, пусто ли поле.
Ответ 7
Используйте функцию LEN для проверки нулевых или пустых значений. Вы можете просто использовать LEN (@SomeVarcharParm) > 0. Это вернет false, если значение равно NULL, '' или ''. Это связано с тем, что LEN (NULL) возвращает NULL, а NULL > 0 возвращает false. Кроме того, LEN ('') возвращает 0. Посмотрите для себя:
SELECT
CASE WHEN NULL > 0 THEN 'NULL > 0 = true' ELSE 'NULL > 0 = false' END,
CASE WHEN LEN(NULL) > 0 THEN 'LEN(NULL) = true' ELSE 'LEN(NULL) = false' END,
CASE WHEN LEN('') > 0 THEN 'LEN('''') > 0 = true' ELSE 'LEN('''') > 0 = false' END,
CASE WHEN LEN(' ') > 0 THEN 'LEN('' '') > 0 = true' ELSE 'LEN('' '') > 0 = false' END,
CASE WHEN LEN(' test ') > 0 THEN 'LEN('' test '') > 0 = true' ELSE 'LEN('' test '') > 0 = false' END
Ответ 8
Select
Coalesce(NullIf(listing.OfferText, ''), NullIf(company.OfferText, ''), '') As Offer_Text,
from tbl_directorylisting listing
Inner Join tbl_companymaster company
On listing.company_id= company.company_id
Ответ 9
Эта простая комбинация COALESCE и NULLIF должна сделать трюк:
SELECT
Coalesce(NULLIF(listing.OfferText, ''), company.OfferText) As Offer_Text
...
Примечание. Добавьте еще одну пустую строку в качестве последнего аргумента COALESCE, если вы хотите, чтобы оператор возвращал пустую строку вместо NULL, если оба значения имеют значение NULL.
Ответ 10
Вот решение, но я не знаю, если он лучший....
Select
Coalesce(Case When Len(listing.Offer_Text) = 0 Then Null Else listing.Offer_Text End, company.Offer_Text, '') As Offer_Text,
from tbl_directorylisting listing
Inner Join tbl_companymaster company
On listing.company_id= company.company_id
Ответ 11
SELECT
COALESCE(listing.OfferText, 'company.OfferText') AS Offer_Text,
FROM
tbl_directorylisting listing
INNER JOIN tbl_companymaster company ON listing.company_id= company.company_id
Ответ 12
этот синтаксис:
SELECT *
FROM tbl_directorylisting listing
WHERE (civilite_etudiant IS NULL)
работал у меня в Microsoft SQL Server 2008 (SP3)
Ответ 13
Я знаю, что это старая тема, но я только что видел один из предыдущих постов выше, и это не правильно.
Если вы используете LEN (...), чтобы определить, является ли поле пустым или пустым, вам нужно использовать его следующим образом:
...WHEN LEN(ISNULL(MyField, '')) < 1 THEN NewValue...
Ответ 14
Чтобы предотвратить записи с Empty
или Null
значением в результате SQL
мы можем просто добавить ..... WHERE Column_name != '' or 'null'
Ответ 15
[Column_name] IS NULL OR LEN(RTRIM(LTRIM([Column_name]))) = 0
Ответ 16
Чтобы проверить, является ли переменная нулевой или пустой, используйте это:
IF LEN(ISNULL(@var, '')) = 0
-- Is empty or NULL
ELSE
-- Is not empty and is not NULL