如何查询Names
人的列,只获取包含正好2 “a”
的名称?
我熟悉与%
一起使用的LIKE
符号,但是当我写a
时,它会找到所有名称,即使是%a
,但我只需查找那些完全 2个字符。
请解释 - 提前致谢
表名:“人物”
列名:“姓名,年龄,性别”
答案 0 :(得分:4)
使用'_a'
。 '_'
是单个字符通配符,其中'%'
匹配0个或更多字符。
如果您需要更高级的匹配项,请使用REGEXP_LIKE
使用正则表达式。请参阅Using Regular Expressions With Oracle Database。
当然,你也可以使用其他技巧。例如,您可以将字符串的长度与相同字符串的长度进行比较,但将“a”从中删除。如果差值为2,则字符串包含两个'a'。但正如你可以看到事情很快变得丑陋,因为当字符串为空时长度返回'null',所以你必须为此做一个例外,如果你想检查名字是'aa'。
select * from People
where
length(Names) - 2 = nvl(length(replace(Names, 'a', '')), 0)
答案 1 :(得分:4)
假设您要求两个a
个字符搜索一个包含两个a但不包含三个字符串的字符串。
select *
from people
where names like '%a%a%'
and name not like '%a%a%a%'
答案 2 :(得分:1)
另一个解决方案是将所有不是a
的内容替换为空,并检查结果字符串是否正好是两个字符:
select names
from people
where length(regexp_replace(names, '[^a]', '')) = 2;
这也可以扩展到处理大写的A
:
select names
from people
where length(regexp_replace(names, '[^aA]', '')) = 2;
SQLFiddle示例:http://sqlfiddle.com/#!4/09bc6
答案 3 :(得分:-1)
select * from People where names like '__';
也可以工作