如何检查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...