Поиск единственного & ldquo; o & rdquo; в loc из таблицы отделов

Игнорировать ответ резервного помощника, он может выглядеть нормально, но имеет несколько проблем:

здесь оба должны быть +1 не -1:

name = name.substring(name.lastIndexOf(':')-1, name.lastIndexOf('/')+1).replace('%', ' ');

Очень опасно, потому что не сразу видно, если путь не имеет белых пробелов, но замена только «%» оставит вас с пучком по 20 в каждом белом пространстве:

name = name.substring(name.lastIndexOf(':')-1, name.lastIndexOf('/')+1).replace('%', ' ');

Есть лучшие способы, чем этот цикл для белого пробелы.

Также это вызовет проблемы во время отладки.

1
задан a_horse_with_no_name 13 July 2018 в 06:26
поделиться

5 ответов

Просто используйте два сравнения:

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%';
0
ответ дан Gordon Linoff 17 August 2018 в 13:41
поделиться

используйте 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

Демоверсия

4
ответ дан Kaushik Nayak 17 August 2018 в 13:41
поделиться

Вы можете использовать LENGTH() для этого

SELECT * FROM department WHERE  (LENGTH(loc) - LENGTH(REPLACE(UPPER(loc),'O'))) = 1
2
ответ дан lucumt 17 August 2018 в 13:41
поделиться
 Select * from Dept where regexp_count(loc,'O')=1;

Это будет работать

0
ответ дан Onkar Tiwari 17 August 2018 в 13:41
поделиться

В этом случае мы можем просто использовать INSTR для поиска числа появления нужного символа / строки, а затем добавить =0 в условие WHERE для извлечения данных, где второго появления не существует

SELECT DEPTNO, DNAME, LOC
FROM yourtable
WHERE INSTR(LOC, 'O', 1, 2) = 0

OUTPUT:

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

] OUTPUT:

DEPTNO  DNAME       LOC
10      ACCOUNTING  NEW YORK
30      SALES       CHICAGO
1
ответ дан Susang 17 August 2018 в 13:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: