假设我有一个表EMP,其中包含,empno,empno,等等任何东西。现在我要查询emp的名字中有两个a的地方。我尝试了以下方法
select ename from emp where ename like "%a%a";
由于“%”的原因,此查询返回了多于2个“a”。所以,请大家多多参与!!
92vpleto1#
您可以添加一个条件,排除出现两次以上的情况:
where ename like '%a%a%' and ename not like '%a%a%a%'
w46czmvw2#
REGEXP_COUNT的用法如下:
REGEXP_COUNT
SELECT * FROM EMP WHERE REGEXP_COUNT(ENAME, 'a', 1, 'i') = 2 -- case insensitive -- REGEXP_COUNT(ENAME, 'a') = 2 - if you want case sensitive comparision
干杯!干杯!
nszi6y053#
如果你使用的是支持REGEXP_REPLACE的MySQL或MariaDB版本,你也可以这样做:
REGEXP_REPLACE
SELECT ename FROM emp WHERE LENGTH(REGEXP_REPLACE(na,'[b-zB-Z]',''))=2;
如果在这里的替换条件'[b-zB-Z]'中省略字符a或A,则使用LENGTH来定义仅当a或A出现两次时才显示结果。否则,我已经测试了@Akina的方法(在评论中),无论任何MySQL/MariaDB版本,它都能很好地工作。
'[b-zB-Z]'
a
A
LENGTH
nfzehxib4#
select * from employee where length(emp_name)- length(replace(upper(emp_name),“A”,''))= 2;
4条答案
按热度按时间92vpleto1#
您可以添加一个条件,排除出现两次以上的情况:
w46czmvw2#
REGEXP_COUNT
的用法如下:干杯!干杯!
nszi6y053#
如果你使用的是支持
REGEXP_REPLACE
的MySQL或MariaDB版本,你也可以这样做:如果在这里的替换条件
'[b-zB-Z]'
中省略字符a
或A
,则使用LENGTH
来定义仅当a
或A
出现两次时才显示结果。否则,我已经测试了@Akina的方法(在评论中),无论任何MySQL/MariaDB版本,它都能很好地工作。
nfzehxib4#
显示姓名中有2个A的员工
select * from employee where length(emp_name)- length(replace(upper(emp_name),“A”,''))= 2;