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

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      

但我想找个伴。OfferText如果列表。Offertext是一个空字符串,如果它是null。

最好的解决方案是什么?


当前回答

COALESCE和NULLIF的简单组合应该可以做到:

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

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

其他回答

在SQL Server 2012中你有IIF,例如你可以像这样使用它

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

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

COALESCE和NULLIF的简单组合应该可以做到:

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

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

防止SQL结果中出现空值或空值的记录

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

SELECT
   CASE WHEN LEN(listing.OfferText) > 0 THEN listing.OfferText 
        ELSE COALESCE(Company.OfferText, '') END 
   AS Offer_Text,

... 

在本例中,使用if列表。OfferText是NULL, LEN()函数也应该返回NULL,但这仍然不是> 0。

更新

在发布这篇文章后的5年半里,我学到了一些东西,现在做得很不同:

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

这与公认的答案类似,但它也有一个备用方案。OfferText也是null。使用NULLIF()的其他当前答案也不这样做。

要检查变量是否为空,请使用以下命令:

IF LEN(ISNULL(@var, '')) = 0
    -- Is empty or NULL
ELSE
    -- Is not empty and is not NULL