1.查单个字符出现的次数
因为单个字符只占有一个长度,所以可以使用repace之后的长度差得到
例如 : 获取@str里面"-"出现的次数
SET @str = '1-101-10102';
SELECT LENGTH(@str) - LENGTH(REPLACE(@str, '-', '')) AS `count_a`;
结果为 : 2
2.查多个字符出现的次数
因为多个字符占的长度不是1,所以使用replace之后,要除以原本的长度
例如 : 获取@str里面"101"出现的次数
SET @str = '1-101-10102';
SELECT LENGTH(@str) - LENGTH(REPLACE(@str, '101', '')) AS `count_hello`,-- 这里是不对的,没有除以长度
(LENGTH(@str) - LENGTH(REPLACE(@str, '101', '')))/LENGTH('101') AS `count_hello2` -- 正确,除以长度
结果 : 6 和 2.0000
现在有个问题,相除之后查出来了好多小数位,我们可以通过如下方式进行去掉。
SET @str = '1-101-10102';
SELECT LENGTH(@str) - LENGTH(REPLACE(@str, '-', '')) AS `count_a`, -- 2
LENGTH(@str) - LENGTH(REPLACE(@str, '101', '')) AS `count_hello`, -- 6
(LENGTH(@str) - LENGTH(REPLACE(@str, '101', '')))/LENGTH('101') AS `count_hello2`, -- 2.0000
TRUNCATE((LENGTH(@str) - LENGTH(REPLACE(@str, '101', '')))/LENGTH('101'),0) AS `count_hello3` -- 2
3.函数讲解
TRUNCATE函数:
SELECT TRUNCATE(3.1413338, 3)
结果为:3.141
- 返回数字的截断值
- 语法格式如下:TRUNCATE(X, D)
- X表示要截取的数字,D表示要保留的小数点位数。如果D为正数,截取小数点位数,如果D为负数,截取整数的个数。