NULL或BLANK字段(ORACLE)

use*_*996 30 oracle null

我是Oracle的新手,所以我的问题可能听起来很愚蠢.我确实经历过以前的帖子,但没有运气.在表中,有一列是空白的,我试图找出列中的空白计数.我试过了:

SELECT COUNT (COL_NAME) FROM TABLE WHERE COL_NAME IS NULL
SELECT COUNT (COL_NAME) FROM TABLE WHERE COL_NAME = ' '
SELECT COUNT (COL_NAME) FROM TABLE WHERE TRIM (COL_NAME)= ' '
Run Code Online (Sandbox Code Playgroud)

上面所有查询的结果是0

但是,当我这样做的时候

SELECT COL_NAME DUMP (COL_NAME,1016) FROM TABLE
Run Code Online (Sandbox Code Playgroud)

给我:

COL_NAME       DUMP (COL_NAME,1016)
               NULL
               NULL
               NULL
Run Code Online (Sandbox Code Playgroud)

等等..

但是该列中有数百或数千个空白字段/空字段.任何人都可以请帮我找在该列中的空/空字段的?我正在使用Toad for Oracle 9.0.1.8

Sha*_*nce 45

COUNT(expresion)返回的行,其中的计数expresion不为空.因此,SELECT COUNT (COL_NAME) FROM TABLE WHERE COL_NAME IS NULL将返回0,因为您只计算col_namewhere col_name为null,并且除null之外的任何数量都为零.COUNT(*)将返回查询的行数:

SELECT COUNT (*) FROM TABLE WHERE COL_NAME IS NULL
Run Code Online (Sandbox Code Playgroud)

其他两个查询可能不返回任何行,因为它们试图匹配具有一个空字符的字符串,并且转储查询指示该列实际上保留空值.

如果您想要包含在计数中的包含可变空格字符串的行,请使用:

SELECT COUNT (*) FROM TABLE WHERE trim(COL_NAME) IS NULL
Run Code Online (Sandbox Code Playgroud)

trim(COL_NAME)将删除开始和结束空格.如果字符串只是空格,则字符串变为''等效于Oracle中的null.

  • 很棒的答案(+1).顺便提一下,Oracle的字符串类型名为"VARCHAR2",因为它的行为和将继续以非标准方式运行(即将NULL与空字符串等同).VARCHAR虽然目前与VARCHAR2相同,但可能在未来开始以更标准的方式运行(即区分NULL和空字符串). (4认同)

Dev*_*ler 9

NULL列不可数,但是具有NULL列的行是.所以,这应该做你想要的:

SELECT COUNT (*) FROM TABLE WHERE COL_NAME IS NULL OR LENGTH(TRIM (COL_NAME)) = 0
Run Code Online (Sandbox Code Playgroud)

请注意,有些非打印字符无法解决.例如,U + 00A0是非中断空格字符,包含该字符的行在视觉上显示为空,但上述测试无法找到.


Bri*_*ian 0

尝试 nvl 功能。从表中选择 count(nvl(col_name,0))。

抱歉我重读了OP。表结构是什么?列是 varchar 还是 char 会有所不同?

尝试

select count(col_name), distinct(col_name) from table group by distinct(col_name)  
Run Code Online (Sandbox Code Playgroud)

/不记得你是否需要在组中区分,但我认为不需要/

并查看它是否为您提供了列名称为空的返回值。