2013-12-13 2 views
1

У меня есть таблица, как this. В String, подобном этому 01-10-33 Я хотел бы знать, сколько раз этот номер появляется в моей таблице. Например, номер 01, я хочу проверить, находится ли он в первой строке, подсчитывать и проверять строку два, три ... EOF и получить номер счета. В примере ссылки я попытался проверить, было ли число в строке без успеха. Я знаю, что я мог бы получить все свои номера и сделать это в java, но можно ли получить это с помощью sql?Найти строку в строке и счет

ожидаемых результатов в данном примере будет

numbers-count 
01 - 1 
02 - 2 
03 - 2 
05 - 1 
10 - 2 
12 - 1 
+1

Пожалуйста, добавьте ожидаемые результаты (на основе вашего SQLFiddle) для публикации. –

ответ

2

Если номера всегда в том формате, который вы могли бы использовать SUBSTRING, чтобы получить все детали вне и сосчитать их:

select number, count(*) 
from (
    select substring(n, 1, 2) as number 
    from l 
    union all 
    select substring(n, 4, 2) 
    from l 
    union all 
    select substring(n, 7, 2) 
    from l 
) a 
group by number; 

sqlfiddle demo

+0

спасибо, это именно то, что мне нужно – Comentarist

0

Если вы хотите знать, сколько раз появляется в строке «01-10-33» «01», вы можете использовать:

select l.*, 
     (length(n) - length(replace(n, @n, '')))/length(@n) 
from l cross join 
    (select @n := '01') const; 

Примечания что это не обрабатывает разделители. Итак, '01' будет соответствовать '001'. Если это требование важно:

select l.*, 
     (length(n)+2 - length(replace(concat('-', n, '-'), @n, '')))/length(@n) 
from l cross join 
    (select @n := '-01-') const; 
Смежные вопросы