繁体   English   中英

Sql(Server)NULL或空字符串仍然在这里

[英]Sql(Server) NULL or empty string still here

我有这个问题

SELECT Ets_Se_Categorie AS Ets_Se_Categorie,COUNT(Ets_Se_Categorie) AS cpte
FROM TableV_MyTest
GROUP BY Ets_Se_Categorie

它给了我下面的表/结果

Ets_Se_Categorie                                            cpte
(Seems to be empty string)                                  5531
Old place                                                   8
Secondary                                                   1066
Principal                                                   4713
Subsidiary                                                  7985
First                                                       9
headquarter                                                 31610
Main Headquarter                                            1587

(Seems to be empty string)表示它是一个空字段

目的就是拥有这个

Ets_Se_Categorie                                            cpte
Old place                                                   8
Secondary                                                   1066
Principal                                                   4713
Subsidiary                                                  7985
First                                                       9
headquarter                                                 31610
Main Headquarter                                            1587

我已经创建了这个查询

 SELECT *
 FROM
 (
 SELECT Ets_Se_Categorie AS Ets_Se_Categorie,COUNT(Ets_Se_Categorie) AS cpte
 FROM TableV_MyTest 
 GROUP BY Ets_Se_Categorie
 ) AS A
 WHERE (A.Ets_Se_Categorie IS NOT NULL OR A.Ets_Se_Categorie != '')

问题没有改变......

为什么我使用嵌套查询?

我先尝试过这个

 SELECT Ets_Se_Categorie,COUNT(Ets_Se_Categorie) AS cpte
 FROM TableV_MyTest 
 WHERE (Ets_Se_Categorie IS NOT NULL OR Ets_Se_Categorie != '')
 GROUP BY Ets_Se_Categorie

没啥事儿...

任何见解将不胜感激。 可能很简单,但我对它的原因有点困惑。

谢谢!

您使用OR而不是AND ,这应该工作:

WHERE (A.Ets_Se_Categorie IS NOT NULL AND A.Ets_Se_Categorie != '')

由于关于为什么OR没有按预期工作的混淆:

返回记录时,两个条件都必须为true 所有记录都是NOT NULL!= '' 考虑一个带有空字符串的记录,该记录为NOT NULL ,因此返回。

为什么你没有看到NULL记录:

NULL不是有效值,表示未定义 所以没有任何东西是等于或不等于NULL NULL = NULL也不是Anything != NULLtrue 您必须使用IS (NOT) NULL

在原始查询中,您已过滤掉NULL值:

 SELECT Ets_Se_Categorie,COUNT(Ets_Se_Categorie) AS cpte
 FROM TableV_MyTest 
 WHERE (Ets_Se_Categorie IS NOT NULL OR Ets_Se_Categorie != '')
 GROUP BY Ets_Se_Categorie

因为NULL既不是NOT NULL也不是!= '' (记得最后一节)。

结论:使用IS NOT NULL AND != ''ISNULL(Column, '') != ''COALESCE(Column, '') != ''这是ANSI sql(适用于所有数据库)。

你可以改用ISNULL 像这样:

WHERE ISNULL(A.Ets_Se_Categorie, '') != ''

你试过LTRIM, RTRIM来删除空格吗?

 SELECT 
    LTRIM(RTRIM(Ets_Se_Categorie))
    ,COUNT(LTRIM(RTRIM(Ets_Se_Categorie))) AS cpte
 FROM TableV_MyTest 
 WHERE 
    (Ets_Se_Categorie IS NOT NULL AND LTRIM(RTRIM(Ets_Se_Categorie)) != '')
 GROUP BY 
       LTRIM(RTRIM(Ets_Se_Categorie))

尝试检查列中的空格。

SELECT Ets_Se_Categorie AS Ets_Se_Categorie,COUNT(Ets_Se_Categorie) AS cpte
FROM TableV_MyTest
WHERE LEN(ISNULL(Ets_Se_Categorie, '')) <> 0
GROUP BY Ets_Se_Categorie

你需要在这里使用AND。 它仍然返回,因为它看起来并且看到该列不是NULL并返回它。 这就是OR的工作原理,如果第一个子句为真则返回。

 SELECT Ets_Se_Categorie,COUNT(Ets_Se_Categorie) AS cpte
 FROM TableV_MyTest 
 WHERE (Ets_Se_Categorie IS NOT NULL AND Ets_Se_Categorie != '')
 GROUP BY Ets_Se_Categorie

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM