DEPTNO DNAME LOC
------- -------------- ---------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
我只希望芝加哥和纽约不要波士顿(仅单个o
)在该位置。如果我这样做:
select *
from dept
where loc like '%o%';
它将显示多个“ O”,但我只想要一个。
答案 0 :(得分:4)
使用REGEXP_COUNT
select * from department where REGEXP_COUNT(loc,'o',1,'i') = 1; --'i' for case-insensitive
或LENGTH
(加上lower()/upper()
使其不区分大小写)
select * from department where length(loc) - length(replace(loc,'O')) = 1
答案 1 :(得分:2)
您可以使用LENGTH()
来完成
SELECT * FROM department WHERE (LENGTH(loc) - LENGTH(REPLACE(UPPER(loc),'O'))) = 1
答案 2 :(得分:1)
在这种情况下,我们可以简单地使用INSTR
搜索所需字符/字符串的出现次数,然后在=0
条件下添加WHERE
来检索第二次出现的数据不存在
SELECT DEPTNO, DNAME, LOC
FROM yourtable
WHERE INSTR(LOC, 'O', 1, 2) = 0
输出:
DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
如果您希望字符串中至少存在一个O
,则将WHERE
条件替换为下面的行
WHERE INSTR(LOC, 'O', 1, 2) = 0 AND INSTR(LOC, 'O', 1, 1) > 0
输出:
DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
30 SALES CHICAGO
答案 3 :(得分:0)
只需使用两个比较:
select *
from dept
where loc like '%o%' and loc not like '%o%o%';
请注意,Oracle通常区分大小写,因此我建议:
select *
from dept
where lower(loc) like '%o%' and loc not like '%o%o%';
答案 4 :(得分:0)
Select * from Dept where regexp_count(loc,'O')=1;
这将起作用