测试用的表结构与数据:
table state id context ................... 1 A-B-A-C 2 B-D-D-A
select id, ( char_length( context ) – char_length( replace( context, “A”, ” ) ) ) as A, (char_length( context ) – char_length( replace( context, “B”, ” ) ) ) as B, (char_length( context ) – char_length( replace( context, “C”, ” ) ) ) as C, (char_length( context ) – char_length( replace( context, “D”, ” ) ) ) as D from state
句法解释:
char_length( context ),获得字符串长度
replace( context, “A”, ” )将字符串中的A替换为空
char_length( context ) – char_length( replace( context, “A”, ” ) ) 计算得到差就是被替换的字符串的个数
统计单个字符串,但是如果是AA-BB-CC-DD呢,我们要统计AA出现的次数还可以用char_length( context ) – char_length( replace( context, “AA”, ” ) )吗?
不能这里替换以后,得到的差是2而不是1,但是实际上’AA’字符串只出现了一次,为什么?因为AA虽然只出现了一次,但是它的长度却是2!
应该这样:(char_length( context ) – char_length( replace( context, “AA”, ” ) )) div 2 as A
div是mysql中进行整数除法的操作符,如果使用’/'将得到浮点数。