web-dev-qa-db-ja.com

Sqlサーバーの文字列がnullか空かを確認する方法

データをチェックしたいのですが、nullまたは空の場合は無視します。現在のクエリは以下の通りです...

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      

Listing.Offertextが空の文字列の場合、およびnullの場合は、company.OfferTextを取得します。

最高のパフォーマンスを発揮するソリューションは何ですか?

206
digiguru

私はこれを思います:

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;
392
Martin Ba
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年半の間にいくつかのことを学びました。

COALESCE(NULLIF(listing.OfferText,''), Company.OfferText, '')

これは一般に認められている回答と似ていますが、Company.OfferTextもnullの場合はフォールバックします。 NULLIF()を使用している他の現在の答えのどれもこれをしません。

49
Joel Coehoorn
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
33

これは別の解決策です:

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
16
unclefofa

ISNULLを使用して、既知の出力に対して答えを確認することができます。

SELECT case when ISNULL(col1, '') = '' then '' else col1 END AS COL1 FROM TEST
11
Code Trawler

SQL Server 2012にはIIFがあります。例えば、次のように使えます。

SELECT IIF(field IS NULL, 1, 0) AS IsNull

同じ方法で、フィールドが空かどうか調べることができます。

10
lkurylo

LEN関数を使用して、NULL値または空の値を確認してください。 LEN(@SomeVarcharParm)> 0を使用するだけです。値がNULL、 ''、または ''の場合、これはfalseを返します。これは、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
4
Zach Johnson
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
...

注:両方の値がNULLの場合にステートメントがNULLではなく空ストリングを戻すようにしたい場合は、最後のCOALESCE引数として別の空ストリングを追加してください。

3
contactmatt

私はこれが古いスレッドであることを知っていますが、私は上記の以前の投稿の1つを見ただけで、それは正しくありません。

LEN(...)を使用して、フィールドがNULLかEMPTYかを判断する場合は、次のように使用する必要があります。次のとおりです。

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

これが解決策ですが、それが最善かどうかはわかりません....

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
2
digiguru

この構文は

SELECT *
FROM tbl_directorylisting listing
WHERE (civilite_etudiant IS NULL)

microsoft SQL Server 2008(SP3)で私のために働いていた

2
Romain Durand
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
2
Anoop Verma
[Column_name] IS NULL OR LEN(RTRIM(LTRIM([Column_name]))) = 0
1
user3829854

SQL結果にEmptyまたはNullの値を持つレコードを防ぐには

単純に..... WHERE Column_name != '' or 'null'を追加することができます

1
Code Crawler