我有以下结构(' '
指的是空格):
name description
---------------------
a yes
b ' '
c ' '
d null
我正在搜索一个查询,它给我的行包含空格,询问下面的结果。
name description
---------------------
b ' '
c ' '
此查询select * from tab1 where description =' '
;会给我只有c,在我的查询中我有很多值有很长的空格。
答案 0 :(得分:2)
您可以使用REGEXP_LIKE:
with src as (select 'a' as name,'yes' as description from dual
union all
select 'b',' ' from dual
union all
select 'c',' ' from dual
union all
select 'd',null from dual)
select * from src where regexp_like(description,'^[ ]+$'))
已编辑:添加了regexp_like(description,'^ [] + $')以仅考虑带空格的描述。如果有's','s'或's'格式的描述,则不会被选中。
答案 1 :(得分:1)
使用TRIM功能修剪空格。
select * from tab1 where TRIM(description) IS NULL;
我没有测试过,但应该可以使用。
答案 2 :(得分:1)
使用此基本查询:
with sample_data(name, description) as (
select 'a', 'yes' from dual union all
select 'b', ' ' from dual union all
select 'c', ' ' from dual union all
select 'd', null from dual
)
select *
from sample_data
您可以在以下where子句中选择以获得所需结果:
where regexp_like(description,'[ ]')); -- at least one space in the string
where regexp_like(description,'[ ]{2,')); -- two or more consecutive spaces
where regexp_like(description,'^[ ]+$')); -- just spaces of any length
where regexp_like(description,'^[ ]{2,}')); -- just paces of length 2 or more
如果你想要任何空白字符(例如制表符,垂直制表符,非空白空格等),你可以用任何一个[ ]
命名字符类替换单个空格字符类[[:space:]]
上面的条款。
答案 3 :(得分:0)
使用LIKE运算符
#ffffff