Как проверить, является ли строка 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-это пустая строка, а также если она равна нулю.



какое самое эффективное решение?

1615   15  

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'

[Column_name] IS NULL OR LEN(RTRIM(LTRIM([Column_name]))) = 0

Я знаю, что это старый поток, но я только что видел один из более ранних сообщений выше, и это не правильно. Если вы используете LEN () определить, является ли поле NULL или пустой тогда вам надо использовать его следующим образом:

...WHEN LEN(ISNULL(MyField, '')) < 1 THEN NewValue...

Comments

    Ничего не найдено.