目录
1、使用场景
因为接触的项目前期其他人员设计时候存储视频之中包含有多段,最近需要转换为视频点播时候,需要拆分原来多段视频为单段,为了验证拆分后是否正确。需要书写一个SQL语句验证拆分后的视频数量是否正确。于是就有查询某个字符串在一个字段之中出现的次数要求,以及可以统计某个词语在文章之中包含的次数等相关业务需求。
2、实现SQL
因为实际项目原来存储的视频多段的格式如下所示的JsonArray字符串:
[{"resource_url":"https://AAAA.mp4","resource_name":"06第二节 无差异曲线分析 (1)"},
{"resource_url":"https://BBB.mp4","resource_name":"07第二节 无差异曲线分析 (2)"},
{"resource_url":"https://CCC.mp4","resource_name":"08第二节 无差异曲线分析 (3)"}]
于是需要统计包含有字符串 } 出现的次数;就能够统计出所有的视频个数总数。
于是有如下SQL语句如下所示:
SELECT
sum(a.videoTotal) videoTotal,
a.course_id
-- a.*
FROM (
SELECT
-- COUNT(t.id) total,
t.id,
FLOOR(((char_length(t.resource) - char_length(REPLACE (t.resource, '}', ''))))/1) as videoTotal,
t.resource_url,
t.resource,
t.course_id
FROM
l_courseware t
WHERE
t.delete_time = 0
AND t.type IN (2,3)
AND t.content_type = 1
AND t.resource != '[]'
-- and t.course_id in (62)
) a -- where a.videoTotal>1
GROUP BY a.course_id
3、成果展现
-- 此方法除法获得的一个浮点数需要取整
SELECT FLOOR((char_length('A-B-A-C')-char_length(replace('A-B-A-C', "A",'')))/1) as ATotal FROM DUAL;
-- 可以使用如下所示的除法函数 div
SELECT (char_length('A-B-A-C')-char_length(replace('A-B-A-C', "A",''))) div 1 as ATotal FROM DUAL;
4、总结
通过使用此种方法,能够获得某个字段某个字符的出现次数,对于文本的统计以及一些特殊情况的处理能够很好的实现。
div是mysql中进行整数除法的操作符,如果使用’/'将得到浮点数。