Sql server 2005 如何检查Sql server字符串是否为null或空
我想检查数据,但如果数据为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
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#functionIsNullOrWhiteSpace
相同的空字符串
此版本尊重空白,其工作原理与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)