匹配字符串中的2个字符 - SQL

时间:2013-10-07 20:30:23

标签: sql oracle

如何查询Names人的列,只获取包含正好2 “a”的名称?

我熟悉与%一起使用的LIKE符号,但是当我写a时,它会找到所有名称,即使是%a,但我只需查找那些完全 2个字符。

请解释 - 提前致谢

  

表名:“人物”

     

列名:“姓名,年龄,性别”

4 个答案:

答案 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 '__';也可以工作