如何检查Sql服务器string是否为空或空

我想检查数据,但忽略它,如果它为空或空。 目前查询如下…

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是一个空string,以及它是否为空。

什么是最好的解决scheme?

我认为这:

 SELECT ISNULL(NULLIF(listing.Offer_Text, ''), company.Offer_Text) AS Offer_Text FROM ... 

是最优雅的解决scheme。

并在伪代码中分解一下:

 // 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 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 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也是空的情况下它也有一个回退。 没有其他当前使用NULLIF()答案也做到这一点。

这是另一个解决scheme:

 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 

用同样的方法可以检查字段是否为空。

 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 

使用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 

这是一个解决scheme,但我不知道这是最好的….

 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)中为我工作

COALESCE和NULLIF这个简单的组合应该做的伎俩:

 SELECT Coalesce(NULLIF(listing.OfferText, ''), company.OfferText) As Offer_Text ... 

注意:如果您希望语句返回空string而不是NULL(如果两个值都为NULL),请添加另一个空string作为最后一个COALESCE参数。

在SQL结果中防止具有Empty值或Null值的logging

我们可以简单地添加..... WHERE Column_name != '' or 'null'

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

我知道这是一个古老的线程,但我刚刚看到上面的一个post,这是不正确的。 如果您使用LEN()来确定字段是NULL还是EMPTY,那么您需要使用它,如下所示:

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