我是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.
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是非中断空格字符,包含该字符的行在视觉上显示为空,但上述测试无法找到.
尝试 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)
/不记得你是否需要在组中区分,但我认为不需要/
并查看它是否为您提供了列名称为空的返回值。
| 归档时间: |
|
| 查看次数: |
230647 次 |
| 最近记录: |