大神们,我想查一下姓名里不包含字母o的人,按照理解我认为以下语句的效果是等价的,但是加not的可以查出结果,而使用排除通配符的却查不出任何记录,也不报错,也试了换成'%[!o]%'的形式,依然没有结果,数据库是Oracle,难道是因为数据库不支持的原因吗??
求大神们赐教
select * from employees_copy t where t.first_name not like '%o%';
select * from employees_copy t where t.first_name like '%[^o]%';
求大神们赐教
select * from employees_copy t where t.first_name not like '%o%';
select * from employees_copy t where t.first_name like '%[^o]%';
--查询姓名里包含字母o的人
select * from employees_copy where regexp_like(first_name,'[,o]+');
--查询姓名里不包含字母o的人
select * from employees_copy where not regexp_like(first_name,'[,o]+');
with tmp as
(
select 'aboc' first_name from dual union all
select 'abc' first_name from dual
)
select *
from tmp
where regexp_like(first_name,'[,o]+') ;
with tmp as
(
select 'aboc' first_name from dual union all
select 'abc' first_name from dual
)
select *
from tmp
where not regexp_like(first_name,'[,o]+') ;我刚自己在电脑上测试了,可以满足你的需求。
select * from employees_copy t where regexp_like(t.first_name,'^[m-o]');--以m,n或o开头
select * from employees_copy t where regexp_like(t.first_name,'^[^m-o]');--不以m,n或o开头
select * from employees_copy t where regexp_like(t.first_name,'[m-o]$');--以m,n或o结尾
select * from employees_copy t where regexp_like(t.first_name,'[^m-o]$');--不以m,n或o结尾关于表达式中的两个符号查到的资料是这样解释的:
POSIX 正则表达式由标准的元字符(metacharacters)所构成:
'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。根据测试,我的理解是'^'放在[ ]里面表示的是否定,即表示需查询的结果不包含方括号中的这些字符,若放在[ ]的前面则表示开头,即需查询的结果要以方括号中的这些字符开头,’$‘若放在[ ]中则与其他字母一样都是表示范围,若放在[ ]的后面则表示结尾,即需查询的结果要以方括号中的这些字符结束,但两者不能同时放在开头和结尾,类似于这样:select * from employees_copy t where regexp_like(t.first_name,'^[m-o]$');
现在的问题有两个:上面的理解正确吗?在Oracle中若要写带有[ ] 表示范围的模糊查询语句是否只能使用正则表达式或是放弃方括号的使用直接用not like?大神们,求赐教啊
1.^和$两者不能同时放在开头和结尾,这一点是错误的。 它们分别放在开头和结尾很正常。
比如:我查询以"粤"开头,8结尾的车牌时,就要同时用上^和$
2.关于第二点:Oracle中若要写带有[ ] 表示范围的模糊查询语句是否只能使用正则表达式或是放弃方括号的使用直接用not like
这个是对的,带有[]只能用正常表达式,否则用like或not like。
另外它们与你的需求:包含,是有区别的。 比如o在first_name中间,就无法查询了。
这个没有什么特别的规则,查询包含的正则一般都是这样用的。'[,o]+' 也可以写成'[o]+',+表示1个或多个,*表示0个或多个。因此这里不能用*
另外还有一点需要注意,有时候会逗号还需要换成转义字符"/"进去匹配。
其他情况你上网也可以查询出来。
最重要的是你要多练习,多总结,自然而然就熟练了。
1.^和$两者不能同时放在开头和结尾,这一点是错误的。 它们分别放在开头和结尾很正常。
比如:我查询以"粤"开头,8结尾的车牌时,就要同时用上^和$
2.关于第二点:Oracle中若要写带有[ ] 表示范围的模糊查询语句是否只能使用正则表达式或是放弃方括号的使用直接用not like
这个是对的,带有[]只能用正常表达式,否则用like或not like。”^和$两者不能同时放在开头和结尾“,这个我刚查了一下正则表达式的相关说明,才发现是我理解的问题,确实可以同时使用的,多谢大神的耐心指点,很受教