sql实现字符串个数统计

812 阅读1分钟

背景

在DB(比如Mysql)中有时会存储长文本数据,当需要统计文本中某字符串(比如单词、换行符等)个数时,需要用到特殊的sql函数

函数介绍

LENGTH()

LENGTH(str) 返回字符串str的字节数

返回字节数意味着如果str是1个双字节字符,结果会是2,若要计算字符长度可使用CHAR_LENGTH(str)

select length('hello world'); -- 结果为11

REPLACE()

REPLACE(str, from_str, to_str)会将str中的所有from_str(区分大小写)替换成to_str并返回

select replace('hello world', 'hello', 'hi'); -- 结果为'hi world'

计算公式

假如需要找出str文本中char字符的个数:先计算str的长度,再算出将str中的char全部清除后的长度,两者差值即为char的长度之和,再用其除以单个char的长度,最后就得到char的个数

char_num = (length(str) - length(replace(str, char, '')))/length(char)

实践案例:sql统计文本行数

要计算一段文本(DB表名为test_tbl,字段名为text)的行数,其实就是先找出其中换行符'\n'的个数,然后+1即可(文本行数比换行符个数多1个)。套用上述公式容易得到

select 1 + (length(text) - length(replace(text, '\n', '')))/length('\n') as line_num from test_tbl