本文主要介绍几个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数据库 | +-------------+