我想检查数据但是如果它为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。
效果最佳的解决方案是什么?
答案 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结果中包含Empty
或Null
值的记录
我们只需添加..... 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)