Как проверить, является ли строка Sql server пустой или пустой
Я хочу проверить данные, но игнорировать его, если он равен нулю или пуст. В настоящее время запрос выглядит следующим образом...
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
но я хочу получить компанию.OfferText если перечисление.Offertext-это пустая строка, а также если она равна нулю.
какое самое эффективное решение?
15 ответов:
Я думаю, что это:
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;
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также имеет значение null. Ни один из других текущих ответов с помощьюNULLIF()и этого.
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
вот еще одно решение:
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
можно использовать
ISNULLи проверить ответ против известного вывода:SELECT case when ISNULL(col1, '') = '' then '' else col1 END AS COL1 FROM TEST
в SQL Server 2012 у вас есть
IIF, например, вы можете использовать его какSELECT IIF(field IS NULL, 1, 0) AS IsNullтаким же образом вы можете проверить, если поле пустое.
используйте функцию 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
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
эта простая комбинация COALESCE и NULLIF должна сделать трюк:
SELECT Coalesce(NULLIF(listing.OfferText, ''), company.OfferText) As Offer_Text ...Примечание: добавьте еще одну пустую строку в качестве последнего аргумента COALESCE, если вы хотите, чтобы оператор возвращал пустую строку вместо NULL, если оба значения равны NULL.
вот решение, но я не знаю, если это лучшее....
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
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
синтаксис :
SELECT * FROM tbl_directorylisting listing WHERE (civilite_etudiant IS NULL)работал на меня в Microsoft SQL Server 2008 (SP3)
чтобы предотвратить записи с
EmptyилиNullзначение в результате SQLмы можем просто добавить
..... WHERE Column_name != '' or 'null'
Я знаю, что это старый поток, но я только что видел один из более ранних сообщений выше, и это не правильно. Если вы используете LEN () определить, является ли поле NULL или пустой тогда вам надо использовать его следующим образом:
...WHEN LEN(ISNULL(MyField, '')) < 1 THEN NewValue...
Comments