我想检查数据但是如果它为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
但是我想得到company.OfferText,如果listing.Offertext是一个空字符串,以及它是否为null.
什么是性能最佳的解决方案?
我认为这:
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函数检查空值或空值。您可以只使用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