本文主要介绍几个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 |
+-------+-----+-------+--------+------+------+
实例1的结果中 LENGTH(true) 和 LENGTH(false) 结果都是1,是因为布尔值ture返回1,false返回0。
实例2:
mysql> select LENGTH('mysql') as mysql,
LENGTH('数据库') as'数据库',
LENGTH('mysql数据库') as'mysql数据库';
+-------+--------+-------------+
| mysql |数据库| mysql数据库 |
+-------+--------+-------------+
| 5 | 6 | 11 |
+-------+--------+-------------+
实例2中,LENGTH('mysql')的结果是5,而 LENGTH('数据库') 的结果是6,这个结果与当前客户端的字符集有关。
查看字符集
mysql> show VARIABLES like'%char%';
+--------------------------+-----------------------------------+
| Variable_name |Value|
+--------------------------+-----------------------------------+
|character_set_client | utf8 |
| character_set_connection |utf8|
|character_set_database | latin1 |
| character_set_filesystem |binary|
|character_set_results | utf8 |
| character_set_server |latin1|
|character_set_system | utf8 |
| character_sets_dir |D:softwaremysqlsharecharsets|
+--------------------------+-----------------------------------+
由上结果可以看到,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.00sec)
mysql>select CONCAT('mysql',1,3.14,LENGTH('mysql'),true,null) as out_put;
+---------+
| out_put |
+---------+
| NULL |
+---------+
同样布尔值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 |
+-------+-------+
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.00sec)
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.00sec)
mysql>selectSUBSTR('mysql',2,2)asout_put1,
SUBSTR('mysql'FROM2for2)asout_put2;
+----------+----------+
| out_put1 | out_put2 |
+----------+----------+
| ys | ys |
+----------+----------+
从实例的结果可以看到,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数据库 |
+-------------+