2013-12-13 128 views
1

我有一个表,如this。在像这样的字符串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”出现在字符串“01-10-33”,你可以使用:

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;