MySQL常用字符函数小结

备注:测试数据库版本为MySQL 8.0

这个blog我们来聊聊常见的字符函数

函数名函数用途
UPPER()返回大写的字符
LOWER()返回小写的字符
LTRIM()左边去掉空格
TRIM()去掉空格
RTRIM()右边去掉空格
SPACE()返回指定长度的空格
CONCAT()连接字符串
CONCAT_WS()指定分隔符连接字符串
CHAR_LENGTH()返回字符个数
LENGTH()返回字节个数
SUBSTR()截取字符
SUBSTRING_INDEX()截取字符
INSTR()字符出现位置函数
LEFT()返回左边N个字符
RIGHT()返回右边N个字符
LPAD()在左边填充指定内容
RPAD()在右边填充指定内容
LIKE匹配字符函数
QUOTE()输出转义字符
REPEAT()重复字符
REPLACE()替换字符
REVERSE()反转字符

一.大小写函数

UPPER() 返回大写的字符
LOWER() 返回小写的字符

select UPPER('Abc');
select LOWER('Abc');
mysql> select UPPER('Abc');
+--------------+
| UPPER('Abc') |
+--------------+
| ABC          |
+--------------+
1 row in set (0.00 sec)

mysql> select LOWER('Abc');
+--------------+
| LOWER('Abc') |
+--------------+
| abc          |
+--------------+
1 row in set (0.00 sec)

二.空格函数

LTRIM() 左边去掉空格
TRIM() 去掉空格
RTRIM() 右边去掉空格
SPACE() 返回指定长度的空格

如果中间有空格需要去掉,可以使用replace

-- 去掉左边、两端、右边的空格
select ltrim(' abc def '),trim(' abc def '),rtrim(' abc def ');
-- 将abcd从字符串中剔除
select trim('abcd' from 'abcdefghia');
-- 将a从字符中剔除
select trim('a' from 'abcdefghia');
-- 返回10个空格
select SPACE(10);
mysql> -- 去掉左边、两端、右边的空格
mysql> select ltrim(' abc def '),trim(' abc def '),rtrim(' abc def ');
+--------------------+-------------------+--------------------+
| ltrim(' abc def ') | trim(' abc def ') | rtrim(' abc def ') |
+--------------------+-------------------+--------------------+
| abc def            | abc def           |  abc def           |
+--------------------+-------------------+--------------------+
1 row in set (0.00 sec)

mysql> -- 将abcd从字符串中剔除
mysql> select trim('abcd' from 'abcdefghia');
+--------------------------------+
| trim('abcd' from 'abcdefghia') |
+--------------------------------+
| efghia                         |
+--------------------------------+
1 row in set (0.00 sec)

mysql> -- 将a从字符中剔除
mysql> select trim('a' from 'abcdefghia');
+-----------------------------+
| trim('a' from 'abcdefghia') |
+-----------------------------+
| bcdefghi                    |
+-----------------------------+
1 row in set (0.00 sec)

mysql> -- 返回10个空格
mysql> select SPACE(10);
+------------+
| SPACE(10)  |
+------------+
|            |
+------------+
1 row in set (0.00 sec)

三.连接函数

CONCAT() 连接字符串
CONCAT_WS() 指定分隔符连接字符串

语法:
CONCAT(str1,str2,…)
CONCAT_WS(separator,str1,str2,…)

-- concat可以带一个或多个参数
select concat('a','b','c');
select concat('a','b','c','d');

-- 如需要使用分隔符连接,比较麻烦
select concat('a','-','b','-','c','-','d');
-- 当遇到空字符的时候也不好处理
select concat('a','-',null,'-','c','-','d');

-- 此时可以使用concat_ws
select concat_ws('-','a','b','c','d');
select concat_ws('-','a',null,'c','d');
mysql> -- concat可以带一个或多个参数
mysql> select concat('a','b','c');
+---------------------+
| concat('a','b','c') |
+---------------------+
| abc                 |
+---------------------+
1 row in set (0.00 sec)

mysql> select concat('a','b','c','d');
+-------------------------+
| concat('a','b','c','d') |
+-------------------------+
| abcd                    |
+-------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 如需要使用分隔符连接,比较麻烦
mysql> select concat('a','-','b','-','c','-','d');
+-------------------------------------+
| concat('a','-','b','-','c','-','d') |
+-------------------------------------+
| a-b-c-d                             |
+-------------------------------------+
1 row in set (0.00 sec)

mysql> -- 当遇到空字符的时候也不好处理
mysql> select concat('a','-',null,'-','c','-','d');
+--------------------------------------+
| concat('a','-',null,'-','c','-','d') |
+--------------------------------------+
| NULL                                 |
+--------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 此时可以使用concat_ws
mysql> select concat_ws('-','a','b','c','d');
+--------------------------------+
| concat_ws('-','a','b','c','d') |
+--------------------------------+
| a-b-c-d                        |
+--------------------------------+
1 row in set (0.00 sec)

mysql> select concat_ws('-','a',null,'c','d');
+---------------------------------+
| concat_ws('-','a',null,'c','d') |
+---------------------------------+
| a-c-d                           |
+---------------------------------+
1 row in set (0.00 sec)

四.字符长度函数

CHAR_LENGTH() 返回字符个数
LENGTH() 返回字节个数

-- 默认字符集是UTF8 1个汉字3个字节

-- 如果字符都是英文,则输出结果一致
select char_length('abc');
select length('abc');

-- 如果字符中包含中文,则输出结果不一致
select length('张三');
select char_length('张三');
mysql> -- 如果字符都是英文,则输出结果一致
mysql> select char_length('abc');
+--------------------+
| char_length('abc') |
+--------------------+
|                  3 |
+--------------------+
1 row in set (0.00 sec)

mysql> select length('abc');
+---------------+
| length('abc') |
+---------------+
|             3 |
+---------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 如果字符中包含中文,则输出结果不一致
mysql> select length('张三');
+------------------+
| length('张三')   |
+------------------+
|                6 |
+------------------+
1 row in set (0.00 sec)

mysql> select char_length('张三');
+-----------------------+
| char_length('张三')   |
+-----------------------+
|                     2 |
+-----------------------+
1 row in set (0.00 sec)

五.字符截取函数

SUBSTR() 截取字符
SUBSTRING_INDEX() 截取字符
INSTR() 字符出现位置函数
LEFT()
RIGHT()

语法:
SUBSTR(str,pos), SUBSTR(str FROM pos), SUBSTR(str,pos,len), SUBSTR(str FROM pos FOR len)
SUBSTRING_INDEX(str,delim,count)
INSTR(str,substr)
LEFT(str,len)
RIGHT(str,len)

-- 字符截取,从第5位开始截,len没有值,表示截取到最后
select substr('abcdefghi',5);

-- 字符截取,从第5位开始截,截取2个字符
select substr('abcdefghi',5,2);

-- 字符截取,从第-5位开始截,截取2个字符
select substr('abcdefghi',-5,2);



-- '.'第一次出现的地方,保留左边的
select substring_index('www.mysql.com','.',1);

-- '.'最后一次出现的地方,保留右边的
select substring_index('www.mysql.com','.',-1);

-- '.'出现的位置
select instr('www.mysql.com','.');

-- 从左边开始截取5个字符
select left('www.mysql.com',5);

-- 从右边开始截取5个字符
select right('www.mysql.com',5);
mysql> -- 字符截取,从第5位开始截,len没有值,表示截取到最后
mysql> select substr('abcdefghi',5);
+-----------------------+
| substr('abcdefghi',5) |
+-----------------------+
| efghi                 |
+-----------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 字符截取,从第5位开始截,截取2个字符
mysql> select substr('abcdefghi',5,2);
+-------------------------+
| substr('abcdefghi',5,2) |
+-------------------------+
| ef                      |
+-------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 字符截取,从第-5位开始截,截取2个字符
mysql> select substr('abcdefghi',-5,2);
+--------------------------+
| substr('abcdefghi',-5,2) |
+--------------------------+
| ef                       |
+--------------------------+
1 row in set (0.00 sec)

mysql>
mysql>
mysql>
mysql> -- '.'第一次出现的地方,保留左边的
mysql> select substring_index('www.mysql.com','.',1);
+----------------------------------------+
| substring_index('www.mysql.com','.',1) |
+----------------------------------------+
| www                                    |
+----------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- '.'最后一次出现的地方,保留右边的
mysql> select substring_index('www.mysql.com','.',-1);
+-----------------------------------------+
| substring_index('www.mysql.com','.',-1) |
+-----------------------------------------+
| com                                     |
+-----------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- '.'出现的位置
mysql> select instr('www.mysql.com','.');
+----------------------------+
| instr('www.mysql.com','.') |
+----------------------------+
|                          4 |
+----------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 从左边开始截取5个字符
mysql> select left('www.mysql.com',5);
+-------------------------+
| left('www.mysql.com',5) |
+-------------------------+
| www.m                   |
+-------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 从右边开始截取5个字符
mysql> select right('www.mysql.com',5);
+--------------------------+
| right('www.mysql.com',5) |
+--------------------------+
| l.com                    |
+--------------------------+
1 row in set (0.00 sec)

六.字符串填充函数

LPAD() 在左边填充指定内容
RPAD() 在右边填充指定内容

语法
LPAD(str,len,padstr)
RPAD(str,len,padstr)

SELECT LPAD('hi',4,'??');
SELECT LPAD('hi',1,'??');


SELECT RPAD('hi',4,'??');
SELECT RPAD('hi',1,'??');

mysql> SELECT LPAD('hi',4,'??');
+-------------------+
| LPAD('hi',4,'??') |
+-------------------+
| ??hi              |
+-------------------+
1 row in set (0.00 sec)

mysql> SELECT LPAD('hi',1,'??');
+-------------------+
| LPAD('hi',1,'??') |
+-------------------+
| h                 |
+-------------------+
1 row in set (0.00 sec)

mysql>
mysql>
mysql> SELECT RPAD('hi',4,'??');
+-------------------+
| RPAD('hi',4,'??') |
+-------------------+
| hi??              |
+-------------------+
1 row in set (0.00 sec)

mysql> SELECT RPAD('hi',1,'??');
+-------------------+
| RPAD('hi',1,'??') |
+-------------------+
| h                 |
+-------------------+
1 row in set (0.00 sec)

七.其它常用字符函数

LIKE 匹配字符函数
QUOTE() 屏蔽字符串中的转移字符
REPEAT() 重复字符
REPLACE() 替换字符
REVERSE() 反转字符

语法:
QUOTE(str)
REPEAT(str,count)
REPLACE(str,from_str,to_str)
REVERSE(str)

-- 测试数据
create table t(name varchar(20));
insert into t values ('abc'),('ABC'),('def'),('abcdef'),('aaa');

-- 匹配a开头的,默认的情况下不区分大小写
select * from t where name like 'a%';

-- 匹配a结尾的
select * from t where name like '%a%';
mysql> -- 匹配a开头的,默认的情况下不区分大小写
mysql> select * from t where name like 'a%';
+--------+
| name   |
+--------+
| abc    |
| ABC    |
| abcdef |
| aaa    |
+--------+
4 rows in set (0.00 sec)

mysql>
mysql> -- 匹配a结尾的
mysql> select * from t where name like '%a%';
+--------+
| name   |
+--------+
| abc    |
| ABC    |
| abcdef |
| aaa    |
+--------+
4 rows in set (0.00 sec)
-- quote输出完整的支付
select 'abc\.def' as col1,quote('abc\.def') as col2;

-- 重复字符3吃
SELECT REPEAT('MySQL', 3);

-- 将w替换为Ww
SELECT REPLACE('www.mysql.com', 'w', 'Ww');

-- 反转支付
SELECT REVERSE('abc');
mysql> -- quote输出完整的支付
mysql> select 'abc\.def' as col1,quote('abc\.def') as col2;
+---------+-----------+
| col1    | col2      |
+---------+-----------+
| abc.def | 'abc.def' |
+---------+-----------+
1 row in set (0.00 sec)

mysql>
mysql> -- 重复字符3吃
mysql> SELECT REPEAT('MySQL', 3);
+--------------------+
| REPEAT('MySQL', 3) |
+--------------------+
| MySQLMySQLMySQL    |
+--------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 将w替换为Ww
mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
+-------------------------------------+
| REPLACE('www.mysql.com', 'w', 'Ww') |
+-------------------------------------+
| WwWwWw.mysql.com                    |
+-------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> -- 反转支付
mysql> SELECT REVERSE('abc');
+----------------+
| REVERSE('abc') |
+----------------+
| cba            |
+----------------+
1 row in set (0.00 sec)

mysql>
MySQL中concat函数 使用方法: CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。 注意: 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。 一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col) MySQL的concat函数可以连接一个或者多个字符串,如 mysql> select concat('10'); +--------------+ | concat('10') | +--------------+ | 10 | +--------------+ 1 row in set (0.00 sec) mysql> select concat('11','22','33'); +------------------------+ | concat('11','22','33') | +------------------------+ | 112233 | +------------------------+ 1 row in set (0.00 sec) MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL mysql> select concat('11','22',null); +------------------------+ | concat('11','22',null) | +------------------------+ | NULL | +------------------------+ 1 row in set (0.00 sec) MySQL中concat_ws函数 使用方法: CONCAT_WS(separator,str1,str2,...) CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。 注意: 如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。 如连接后以逗号分隔 mysql> select concat_ws(',','11','22','33'); +-------------------------------+ | concat_ws(',','11','22','33') | +-------------------------------+ | 11,22,33 | +-------------------------------+ 1 row in set (0.00 sec) 和MySQL中concat函数不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL mysql> select concat_ws(',','11','22',NULL); +-------------------------------+ | concat_ws(',','11','22',NULL) | +-------------------------------+ | 11,22 | +-------------------------------+ 1 row in set (0.00 sec) MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 mysql> select * from aa; +------+------+ | id| name | +------+------+ |1 | 10| |1 | 20| |1 | 20| |2 | 20| |3 | 200 | |3 | 500 | +------+------+ 6 rows in set (0.00 sec) 以id分组,把name字段的值打印在一行,逗号分隔(默认) mysql> select id,group_concat(name) from aa group by id; +------+--------------------+ | id| group_concat(name) | +------+--------------------+ |1 | 10,20,20| |2 | 20 | |3 | 200,500| +------+--------------------+ 3 rows in set (0.00 sec) 以id分组,把name字段的值打印在一行,分号分隔 mysql> select id,group_concat(name separator ';') from aa group by id; +------+----------------------------------+ | id| group_concat(name separator ';') | +------+----------------------------------+ |1 | 10;20;20 | |2 | 20| |3 | 200;500 | +------+----------------------------------+ 3 rows in set (0.00 sec) 以id分组,把去冗余的name字段的值打印在一行, 逗号分隔 mysql> select id,group_concat(distinct name) from aa group by id; +------+-----------------------------+ | id| group_concat(distinct name) | +------+-----------------------------+ |1 | 10,20| |2 | 20 | |3 | 200,500 | +------+-----------------------------+ 3 rows in set (0.00 sec) 以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序 mysql> select id,group_concat(name order by name desc) from aa group by id; +------+---------------------------------------+ | id| group_concat(name order by name desc) | +------+---------------------------------------+ |1 | 20,20,10 | |2 | 20| |3 | 500,200| +------+---------------------------------------+ 3 rows in set (0.00 sec) repeat()函数 用来复制字符串,如下'ab'表示要复制的字符串,2表示复制的份数 mysql> select repeat('ab',2); +----------------+ | repeat('ab',2) | +----------------+ | abab | +----------------+ 1 row in set (0.00 sec) 又如 mysql> select repeat('a',2); +---------------+ | repeat('a',2) | +---------------+ | aa | +---------------+ 1 row in set (0.00 sec) mysql向表中某字段后追加一段字符串: update table_name set field=CONCAT(field,'',str) mysql 向表中某字段前加字符串 update table_name set field=CONCAT('str',field) 这个函数对你也许会有很大帮助哦!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值