如何检查Sql服务器字符串是空还是空

时间:2008-12-02 14:31:29

标签: sql-server-2005

我想检查数据但是如果它为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。

效果最佳的解决方案是什么?

18 个答案:

答案 0 :(得分:390)

我想这个:

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;

答案 1 :(得分:48)

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()的其他当前答案都不会这样做。

答案 2 :(得分:33)

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

答案 3 :(得分:16)

这是另一种解决方案:

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

答案 4 :(得分:11)

您可以使用ISNULL并根据已知输出检查答案:

SELECT case when ISNULL(col1, '') = '' then '' else col1 END AS COL1 FROM TEST

答案 5 :(得分:10)

在SQL Server 2012中,您有IIF,例如,您可以像

一样使用它
SELECT IIF(field IS NULL, 1, 0) AS IsNull

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

答案 6 :(得分:4)

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

答案 7 :(得分:3)

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

答案 8 :(得分:3)

COALESCE和NULLIF的简单组合应该可以解决这个问题:

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

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

答案 9 :(得分:2)

这种语法:

SELECT *
FROM tbl_directorylisting listing
WHERE (civilite_etudiant IS NULL)

在Microsoft SQL Server 2008(SP3)中为我工作

答案 10 :(得分:2)

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

答案 11 :(得分:2)

这是一个解决方案,但我不知道它是否是最好的......

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

答案 12 :(得分:2)

我知道这是一个旧帖子,但我刚刚看到上面的一篇帖子而且不正确。

如果您使用 LEN(...)来确定该字段是 NULL还是EMPTY ,那么您需要按如下方式使用它:

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

答案 13 :(得分:1)

防止SQL结果中包含EmptyNull值的记录

我们只需添加..... WHERE Column_name != '' or 'null'

即可

答案 14 :(得分:1)

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

答案 15 :(得分:0)

这同样适合空格。

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

答案 16 :(得分:0)

[Column_name]>''排除Null和空字符串。单引号之间有一个空格。

答案 17 :(得分:0)

在处理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)