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

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。

最好的解决方案是什么?


当前回答

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

其他回答

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

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

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

这也迎合了空间。

(len(rtrim(ltrim(isnull(MyField,'')))) !=0

我知道这是一个旧的帖子,但我刚刚看到上面的一个早期帖子,它是不正确的。

如果你正在使用LEN(…)来确定字段是NULL还是EMPTY,那么你需要像下面这样使用它:

...WHEN LEN(ISNULL(MyField, '')) < 1 THEN NewValue...
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

在处理VARCHAR/NVARCHAR数据时,大多数其他示例将空白视为空字符串,这等于c#函数IsNullOrWhiteSpace。

这个版本尊重空白,工作原理与c#函数IsNullOrEmpty相同:

IIF(ISNULL(DATALENGTH(val), 0) = 0, whenTrueValue, whenFalseValue)

简单的测试:

SELECT
    '"' + val + '"' AS [StrValue],
    IIF(ISNULL(DATALENGTH(val), 0) = 0, 'TRUE', 'FALSE') AS IsNullOrEmpty
FROM ( VALUES 
    (NULL), 
    (''), 
    (' '), 
    ('a'), 
    ('a ')
) S (val)