本文主要介绍几个MySQL常见的字符函数。
1、length()函数
length函数用于获取值的字节个数。str参数可以是一个字符串、整数、浮点数、布尔值、函数、null等。
注:如果参数值是null,则结果也是null。
length(str);
实例1:
mysql> select length('mysql') as mysql,
length(12) as num,
LENGTH(true) as tureR,
LENGTH(false) as falseR,
length(NOW()) as fun,
length(null) as 'null';
+-------+-----+-------+--------+------+------+
| mysql | num | tureR | falseR | fun | null
|+-------+-----+-------+--------+------+------+
| 5 | 2 | 1 | 1 | 19 | NULL |
+-------+-----+-------+--------+------+------+
实例2:
mysql> select LENGTH('mysql') as mysql,
LENGTH('数据库') as '数据库';
+-------+--------+
| mysql | 数据库 |
+-------+--------+
| 5 | 6 |
+-------+--------+
1 row in set (0.00 sec)
实例2中,LENGTH('mysql')的结果是5,而 LENGTH('数据库') 的结果是6,这个结果与当前客户端的字符集有关。
查看字符集:
mysql> show VARIABLES like '%char%';
+--------------------------+-----------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:\software\mysql\share\charsets\ |
+--------------------------+-----------------------------------+
8 rows in set (0.00 sec)
由上结果可以看到,character_set_client 的值是latin1,即当前使用的客户端的字符集是latin1,一个英文字符占1个字节,一个中文字符占2个字节。
如果函数的参数用到一个表的字段,则结果与表使用的字符集有关,如utf8一个中文字符是三个字节,gbk是两个字节。
2、concat()函数
concat函数参数用于连接参数,产生新的字符串。
CONCAT(str1,str2,...);
函数的参数最少需要一个,可以有多个,其类型可以是一个字符串、整数、浮点数、布尔值、函数等。
实例
mysql> select CONCAT('mysql',1,3.14,LENGTH('mysql'),'_',true) as out_put;
+---------------+
| out_put |
+---------------+
| mysql13.145_1 |
+---------------+
1 row in set (0.00 sec)
mysql> select CONCAT('mysql',1,3.14,LENGTH('mysql'),true,null) as out_put;
+---------+
| out_put |
+---------+
| NULL |
+---------+
1 row in set (0.00 sec)
同样布尔值true返回1,如果有一个参数是null,则最终返回结果就是null。
3、upper()和lower()函数
upper函数将参数值全部转为大写字母,lower函数将参数值全部转为小写字母。
UPPER(str)LOWER(str)
UPPER和LOWER均为一个参数,同样,参数值为布尔值时,true返回1,false返回0,值为null时,结果是NULL。
实例:
mysql> select upper('mysql') as upper,lower('MYSQL') lower;
+-------+-------+
| upper | lower |
+-------+-------+
| MYSQL | mysql |
+-------+-------+
1 row in set (0.00 sec)
4、substr()和substring()函数
substr和substring功能一样,用于对参数值进行截取。
根据参数列表不同,substr有四个重载的方法。str可以是任意有效值,但只有是数值,并且在str参数的长度之内可以成功截取,若str是null,则结果是null,其他返回空。str参数的长度是指字符的个数。
SUBSTR(str,pos)
SUBSTR(str,pos,len)
SUBSTR(str FROM pos)
SUBSTR(str FROM pos FOR len)
SUBSTR(str,pos)实例:
mysql> select SUBSTR('mysql',2) as out_put;
+---------+
| out_put |
+---------+
| ysql |
+---------+
1 row in set (0.00 sec)
SUBSTR(str,pos):截取从指定索引字符后面所有字符,索引从1开始。
SUBSTR(str,pos,len)实例:
mysql> select SUBSTR('mysql',2,2) as out_put;
+---------+
| out_put |
+---------+
| ys |
+---------+
SUBSTR(str,pos,len):截取从指定索引处指定长度字符。
SUBSTR(str FROM pos) 和 SUBSTR(str FROM pos FOR len)实例:
mysql> select SUBSTR('mysql',2) as out_put1, SUBSTR('mysql' FROM 2) as out_put2;
+----------+----------+
| out_put1 | out_put2 |
+----------+----------+
| ysql | ysql |
+----------+----------+
1 row in set (0.00 sec)
mysql> select SUBSTR('mysql',2,2) as out_put1, SUBSTR('mysql' FROM 2 for 2) as out_put2;
+----------+----------+
| out_put1 | out_put2 |
+----------+----------+
| ys | ys |
+----------+----------+
1 row in set (0.00 sec)
从实例的结果可以看到,SUBSTR(str FROM pos)其实和 SUBSTR(str,pos) 功能一样,而 SUBSTR(str FROM pos FOR len) 和 SUBSTR(str,pos,len) 功能一样。
5、instr()函数
instr函数返回子串第一次出现的索引(从1开始),没有则返回0。
INSTR(str,substr)
str参数和substr参数可以是任意有效值。
实例:
mysql> select INSTR('Mysql_mysql','m') as out_put;
+---------+|
out_put |
+---------+
| 1 |
+---------+
实例结果中看出,函数匹配时对大小写不敏感。
6、trim()函数
trim函数去参数值前后空格。
TRIM([remstr FROM] str)
实例:
mysql> select TRIM(' mysql ') as out_put;
+---------+
| out_put |
+---------+
| mysql |
+---------+
也可以去除前后指定字符:
mysql> select TRIM('a' from 'aaMySQLaa') as out_put;
+---------+
| out_put |
+---------+
| MySQL |
+---------+
7、lpad函数
lpad函数作用:用指定的字符实现左填充至指定长度。
LPAD(str,len,padstr)
实例:
mysql> select LPAD('mysql',10,'*') as out_put;
+------------+
| out_put |
+------------+
| *****mysql |
+------------+
上例中,在mysql左填充了5个*,返回值的字符个数是10。将函数第二个参数10改为2,看看结果:
mysql> select LPAD('mysql',2,'*') as out_put;
+---------+
| out_put |
+---------+
| my |
+---------+
2比mysql字符个数要少,所以不会填充,并且因为结果只需要返回2个字符,会把在索引2之后的字符截断。
8、replace()函数
REPLACE(str,from_str,to_str)
replace函数作用:在str中找出所有from_str,用to_str替换。
实例:
mysql> select REPLACE('oracle数据库','oracle','mysql') as out_put;
+-------------+
| out_put |
+-------------+
| mysql数据库 |
+-------------+