如何计算特定字符在字符串特定位置的出现次数 - MYSQL 5.5

How to Count occurrence of a specific character in a specific position of string - 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` 

但是如果 '!'每次不计算角色的其他实例时,它都会出现在第一个位置。我有每个职位的脚本。

如有任何帮助,我们将不胜感激。提前致谢!

~h

我不确定这是否是最有效的方法:

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