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

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

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是空字符串,以及如果它是空字符串,我想获得company.OfferText。

最好的解决方案是什么?

703014 次浏览
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()的其他当前答案也没有这样做。

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

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

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结果中包含EmptyNull值的记录

我们可以简单地添加..... WHERE Column_name != '' or '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)为我工作

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

在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

COALESCE和NULLIF的简单组合应该可以做到:

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

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

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

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

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

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

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

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#函数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)