Mysql 温故知新系列「字符串函数(trim, find_in_set, format, lpad)」

1,178 阅读2分钟

「这是我参与11月更文挑战的第 18 天,活动详情查看:2021最后一次更文挑战

trim

常规用于删除数据的前后空格,使用的方式为 trim(str)

如果需要删除前后指定的字符串,其格式为 trim(remstr FROM str)

image.png

此外 trim 还提供一个参数来限定删除 【前+后|前|后】 的指定字符串

image.png

ltrim/rtrim

如果我们的需求仅仅是删除字符串前面(或者后面)的空格,可以使用 mysql 中对 trim 封装的简化函数 ltrim(str), rtrim(str)

trim(leading ' ' from str) ==> ltrim(str)
trim(trailing ' ' from str) ==> rtrim(str)

find_in_set

find_in_set(str, strList)

当字符串是以 , 分割的数据列表,即这个字符串可以根据 , 切割得到一个列表数据,在这种情况下,可以使用 find_in_set 查询一个子字符串是否在那个列表中,在则返回数字下标(从 1 开始)如果没有找到,则返回 0

image.png

image.png

format

通常,我们在查询中使用了聚合函数 avg 去计算平均值,很有可能得到一个小数,有的时候要求这个值需要保留几位小数,以及将数按千分位隔开

format(N, D, local)

N 表示需要处理的值,D 表示保留几位小数,local 表示语音区域,默认为 en_US,即数格式化后的效果为 xx,xxx,xxx.xx

image.png

lcase/ucase

mysql 中可以提供了对字符串进行大小写转化的函数:

  • lcase 字符串转小写
  • ucase 字符串转大写
SELECT lcase('AAA');
--> aaa
SELECT ucase('aaa');
--> AAA

repeat

SELECT repeat(str, n)

将字符串 str 重复 n 次后返回

image.png

lpad/rpad

在字符串的左边或右边填充指定字符,使这个字符串的长度达到指定的长度

最常见的场景,我们需要生成定长的流水号,比如,流水号格式限定5位,位数不够用 0 填充。

一种偷懒的方案就是,我最高位直接从 1 开始,这样就不会存在开头位数不够的情况

另一种方法就是使用 mysql 提供的 lpad

lpad(str, length, repeatStr);
rpad(str, length, repeatStr);

str 需要处理的字符,length 表示处理后的字符长度,repeatStr 表示用来填充的字符


现在来一个角度刁钻的,比如我给 1abc 填充到 5 位,这又是怎么填充的呢?

image.png

如测试所示,直接循环使用字符串 abc 进行填充,填充足够的位数后就终止


原创文章,未经允许,禁止转载

-- by 安逸的咸鱼