2016-04-14 3 views
0

У меня есть этот тип данных в колонке:Как рассчитать вхождение указанного символа в определенной позиции строки - MYSQL 5,5

!-------!---!------- 
!-------!-----!----- 
!-------!!---------- 
!-------!-----!----- 
!-------!-----!----- 

Мне нужно считать появление «!» - в КАЖДОМ положении строки.

Для позиции 1 - я должен получить количество 5, положения 2 - 0 позиции 3 - 0 позиции 4 - 0 позиции 5 - 0 позиции 6 - 0 позиции 7 - 0 позиции 8 - 0 позиция 9 - 5 Итак, и т. Д. Есть 20 позиций. Я хочу игнорировать «-».

Я пытался использовать местонахождение:

select 
     `color` AS `color`, 
     locate('!', 
       `Info`) AS `Position`, 
     count(`Info`) AS `Count` 
    from 
     `CountReport` 
    where 
     (locate('!', 
       `Info`) = 1) 
    group by `color` 

Но если '!' отображается в первой позиции каждый раз, когда он не учитывает другие экземпляры символа. У меня есть сценарий для каждой позиции.

ЛЮБАЯ помощь с этим была бы весьма признательна. Большое спасибо заранее!

~ ч

ответ

1

я не уверен, является ли это самый эффективный способ сделать это:

select count(case substring(s,1,1) when '!' then 1 else NULL end) as pos1, 
     ... 
     count(case substring(s,10,1) when '!' then 1 else NULL end) as pos10, 
     ... 
     count(case substring(s,20,1) when '!' then 1 else NULL end) as pos20 
from test; 

SQLFiddle

+0

Вы знаете ... Я думаю, что это будет работать! Ты гений! : D Большое спасибо! – Nicoale