Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 如何检查Sql server字符串是否为null或空_Sql Server 2005 - Fatal编程技术网

Sql server 2005 如何检查Sql server字符串是否为null或空

Sql server 2005 如何检查Sql server字符串是否为null或空,sql-server-2005,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.c

我想检查数据,但如果数据为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      
但是如果
listing.Offertext
是空字符串,以及如果它是null,我想得到
company.OfferTex
t

性能最好的解决方案是什么

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()
的其他当前答案都不会执行此操作。

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

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 ISNULL(col1, '') = '' then '' else col1 END AS COL1 FROM TEST

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

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 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
我认为:

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;

防止SQL结果中值为
的记录

我们可以简单地添加
。。。。。其中列名称!=''或“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
SELECT *
FROM tbl_directorylisting listing
WHERE (civilite_etudiant IS NULL)

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

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

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

与检查字段是否为空的方法相同。

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

这个简单的合并和NULLIF组合应该可以做到:

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

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

我知道这是一个旧线程,但我刚刚看到上面的一篇文章,它不正确

如果使用LEN(…)确定字段是空还是空,则需要按如下方式使用它:

...WHEN LEN(ISNULL(MyField, '')) < 1 THEN NewValue...
…当LEN(ISNULL(MyField,)<1时,则NewValue。。。

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

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

这也满足了空间的需求

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

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

在处理
VARCHAR
/
NVARCHAR
数据时,大多数其他示例将空格视为与C#function
IsNullOrWhiteSpace
相同的空字符串

此版本尊重空白,其工作原理与C#函数IsNullOrEmpty相同:

IIF(ISNULL(数据长度(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)

我无法决定是投你的还是福法的,因为他似乎是先回答的,但他的回答在你回答后被编辑了。我最终投票了两者。如果listing.Offer_Text='',它将通过NULLIF条件。我很难过。只要company.Offer_文本不为空,但这会使事情复杂化…=)我们不是应该用修剪来确保一切正常吗planned@irfandar-好吧,如果你想把所有空格都视为空的字符串,那就使用trim。否则,包含所有空格的字符串不是空的。这将是第一个调用端口,但如果您正在执行诸如从表中的多个列进行连接之类的操作,那么这将排除该行,而不仅仅是为该列显示一个空白。该列今天被更新,因此它在某处被索引。我现在知道了一种比原始答案更好的方法。在第一个答案(5年后)中加上一种方法,使用
NULLIF()
,并在
company.OfferText
为null时合并为空字符串。但是,这里的第二个
NULLIF()
调用没有任何作用,就好像该值是一个空字符串,您只是要合并回一个空字符串。当您说“…LEN(NULL)返回NULL,NULL>0返回false…”时,真正的规则是,使用NULL的每个测试或比较都返回NULL!这是值得注意的,但这是一个快捷方式,因为比较会使null合并到正确的布尔值,所以当我们想要为null或empty返回true时,这对LEN(null)=0的反向比较不起作用。
(len(rtrim(ltrim(isnull(MyField,'')))) !=0
SELECT
    '"' + val + '"' AS [StrValue],
    IIF(ISNULL(DATALENGTH(val), 0) = 0, 'TRUE', 'FALSE') AS IsNullOrEmpty
FROM ( VALUES 
    (NULL), 
    (''), 
    (' '), 
    ('a'), 
    ('a ')
) S (val)