trim 实现删除字符串中的指定字符和逗号:
需求背景:
要将name字段中的 1637 删除掉;
使用replace替换为空会存在遗留逗号的问题的情况。
解决方案:trim 函数
update `percent` set name = trim(both ',' from replace(concat(',', name, ','), ',1637,', ','));
语句的意思为:
先给name字段首尾拼接两个逗号 变为:,1637,4512,12,564, 再使用replace将 ,1637,
替换为一个逗号后 该字符串此时变为:,4512,12,564, 再使用 trim(both from )
将首尾的逗号去掉,就实现 指定字符和逗号删除了。 去掉首尾或中间任意一段的字符 相同的逻辑。
完整的语法为: TRIM(both 要删除的字符 from 源字符串)
例:TRIM(BOTH ‘x’ FROM ‘xxxbarxxx’); --删除指定的首尾字符
concat拼接字符串时 字段为null 解决方案:
需求背景:
上面实现了使用trim删除字段中的指定字符,这些字符都是通过拼接而来的。那么在该字段首次尽心拼接的时候也就是字段为null的情况下,拼接字符是拼接不上的。
这个时候使用 传统的concat是拼接不上的,因为CONCAT()函数,拼接参数中存在NULL直接返回NULL。
解决方案:concat_ws() 函数
UPDATE percent SET name = CONCAT_WS(',', name,NULL,'564');
使用此函数也不用考虑逗号的问题,因为只要不为null的情况下每次拼接都会自动在字符的前面拼接上一个逗号,而首次为null的时候拼接则不会拼接
CONCAT_WS(分隔符,参数1,参数2,…参数n)与CONCAT(参数1,参数2,…参数n)
两个函数的区别:
CONCAT_WS():表示concat with separator,即有分隔符的字符串连接
CONCAT():表示将字符串进行连接
两个最重要的区别就是,CONCAT()函数,拼接参数中存在NULL直接返回NULL而CONCAT_WS()函数在执行的时候,不会因为NULL值而返回NULL