データをチェックしたいのですが、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を取得します。
最高のパフォーマンスを発揮するソリューションは何ですか?
私はこれを思います:
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年半の間にいくつかのことを学びました。
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関数を使用して、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
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引数として別の空ストリングを追加してください。
私はこれが古いスレッドであることを知っていますが、私は上記の以前の投稿の1つを見ただけで、それは正しくありません。
LEN(...)を使用して、フィールドがNULLかEMPTYかを判断する場合は、次のように使用する必要があります。次のとおりです。
...WHEN LEN(ISNULL(MyField, '')) < 1 THEN NewValue...
これが解決策ですが、それが最善かどうかはわかりません....
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 *
FROM tbl_directorylisting listing
WHERE (civilite_etudiant IS NULL)
microsoft SQL Server 2008(SP3)で私のために働いていた
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
[Column_name] IS NULL OR LEN(RTRIM(LTRIM([Column_name]))) = 0
SQL結果にEmpty
またはNull
の値を持つレコードを防ぐには
単純に..... WHERE Column_name != '' or 'null'
を追加することができます