一:内置函数
MYSQL中提供了很多内置的函数,以下:
CHAR_LENGTH(str) 返回值为字符串str 的长度,长度的单位为字符。一个多字节字符算作一个单字符。 对于一个包含五个二字节字符集, LENGTH()返回值为 10, 而CHAR_LENGTH()的返回值为5。 eg: mysql> select char_length('zhang') -> ; +----------------------+ | char_length('zhang') | +----------------------+ | 5 | +----------------------+ 1 row in set (0.00 sec) CONCAT(str1,str2,...) 字符串拼接 如有任何一个参数为NULL ,则返回值为 NULL。 mysql> select concat('zz','l') -> ; +------------------+ | concat('zz','l') | +------------------+ | zzl | +------------------+ 1 row in set (0.01 sec) CONCAT_WS(separator,str1,str2,...) 字符串拼接(自定义连接符) CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。 mysql> select CONCAT_WS('**','zzl','cyy'); +-----------------------------+ | CONCAT_WS('**','zzl','cyy') | +-----------------------------+ | zzl**cyy | +-----------------------------+ 1 row in set (0.00 sec) CONV(N,from_base,to_base) 进制转换 mysql> SELECT CONV('a',16,2); 表示将 a 由16进制转换为2进制字符串表示 +----------------+ | CONV('a',16,2) | +----------------+ | 1010 | +----------------+ 1 row in set (0.01 sec) mysql> SELECT CONV('10',8,2); 表示将 a 由8进制转换为2进制字符串表示 +----------------+ | CONV('10',8,2) | +----------------+ | 1000 | +----------------+ 1 row in set (0.00 sec) FORMAT(X,D) 将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若 D 为 0, 则返回结果不带有小数点,或不含小数部分。 eg: mysql> SELECT FORMAT(89333322.31,5); +-----------------------+ | FORMAT(89333322.31,5) | +-----------------------+ | 89,333,322.31000 | +-----------------------+ 1 row in set (0.00 sec) INSERT(str,pos,len,newstr) 在str的指定位置插入字符串 pos:要替换位置其实位置 len:替换的长度 newstr:新字符串 特别的: 如果pos超过原字符串长度,则返回原字符串 如果len超过原字符串长度,则由新字符串完全替换 mysql> select insert('zhang','1','1','Z') -> ; +-----------------------------+ | insert('zhang','1','1','Z') | +-----------------------------+ | Zhang | +-----------------------------+ 1 row in set (0.01 sec) INSTR(str,substr) 返回字符串 str 中子字符串的第一个出现位置。 mysql> select instr('zhang','an') -> ; +---------------------+ | instr('zhang','an') | +---------------------+ | 3 | +---------------------+ 1 row in set (0.01 sec) LEFT(str,len) 返回字符串str 从开始的len位置的子序列字符。 mysql> select left('zhang',8) -> ; +-----------------+ | left('zhang',8) | +-----------------+ | zhang | +-----------------+ 1 row in set (0.00 sec) mysql> select left('zhang',3); +-----------------+ | left('zhang',3) | +-----------------+ | zha | +-----------------+ 1 row in set (0.00 sec) LOWER(str) 变小写 mysql> select LOWER('ZHAng'); +----------------+ | LOWER('ZHAng') | +----------------+ | zhang | +----------------+ 1 row in set (0.00 sec) UPPER(str) 变大写 mysql> select UPPER('ZHAng'); +----------------+ | UPPER('ZHAng') | +----------------+ | ZHANG | +----------------+ 1 row in set (0.00 sec) SUBSTRING(str,pos,len) 获取字符串子序列 mysql> select substring('zhang','3','2') -> ; +----------------------------+ | substring('zhang','3','2') | +----------------------------+ | an | +----------------------------+ 1 row in set (0.00 sec) LOCATE(substr,str,pos) 获取子序列索引位置 mysql> select locate('f','zhangfddadadafff','1'); +------------------------------------+ | locate('f','zhangfddadadafff','1') | +------------------------------------+ | 6 | +------------------------------------+ 1 row in set (0.00 sec) REPEAT(str,count) 返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。 若 count <= 0,则返回一个空字符串。 若str 或 count 为 NULL,则返回 NULL 。 mysql> select repeat('zhang',3) -> ; +-------------------+ | repeat('zhang',3) | +-------------------+ | zhangzhangzhang | +-------------------+ 1 row in set (0.01 sec) mysql> select repeat('zhang',2) -> ; +-------------------+ | repeat('zhang',2) | +-------------------+ | zhangzhang | +-------------------+ 1 row in set (0.00 sec) REPLACE(str,from_str,to_str) 返回字符串str 以及所有被字符串to_str替代的字符串from_str 。 mysql> select replace('zhangzhanling','ling','zhan') -> ; +----------------------------------------+ | replace('zhangzhanling','ling','zhan') | +----------------------------------------+ | zhangzhanzhan | +----------------------------------------+ 1 row in set (0.00 sec) REVERSE(str) 返回字符串 str ,顺序和字符顺序相反。 mysql> select reverse('zhang') -> ; +------------------+ | reverse('zhang') | +------------------+ | gnahz | +------------------+ 1 row in set (0.01 sec) RIGHT(str,len) 从字符串str 开始,返回从后边开始len个字符组成的子序列 mysql> select right('zhang','3') -> ; +--------------------+ | right('zhang','3') | +--------------------+ | ang | +--------------------+ 1 row in set (0.00 sec) SPACE(N) 返回一个由N空格组成的字符串。 mysql> select space(4) -> ; +----------+ | space(4) | +----------+ | | +----------+ 1 row in set (0.00 sec) 不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。 使用 FROM的格式为标准 SQL 语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。在以下格式的函数中可以对pos 使用一个负值。 SUBSTRING(str,pos) , mysql> SELECT SUBSTRING('zhangzhanling',5); +------------------------------+ | SUBSTRING('zhangzhanling',5) | +------------------------------+ | gzhanling | +------------------------------+ 1 row in set (0.00 sec) SUBSTRING(str FROM pos) mysql> SELECT SUBSTRING('zhangzhanling' from 5); +-----------------------------------+ | SUBSTRING('zhangzhanling' from 5) | +-----------------------------------+ | gzhanling | +-----------------------------------+ 1 row in set (0.00 sec) SUBSTRING(str,pos,len) , mysql> SELECT SUBSTRING('zhangzhanling',4,5); +--------------------------------+ | SUBSTRING('zhangzhanling',4,5) | +--------------------------------+ | ngzha | +--------------------------------+ 1 row in set (0.00 sec) SUBSTRING(str FROM pos FOR len) mysql> SELECT SUBSTRING('zhangzhanling' from -4 for 2); +------------------------------------------+ | SUBSTRING('zhangzhanling' from -4 for 2) | +------------------------------------------+ | li | +------------------------------------------+ 1 row in set (0.01 sec)