常用的函数有:
1. 字符串函数;主要用于处理字符串。
2. 数值函数;主要用于处理数字。
3. 日期和时间函数;主要用于处理日期和事件。
4. 系统信息函数;获取系统信息。
1. 使用字符串函数:
虽然每种数据库都支持SQL,但是每种数据库拥有各自所支持的函数。
1.1 合并字符串函数concat() 和 concat_ws():
在MySQL中可以通过函数concat()和concat_ws()将传入的参数连接成为一个字符串。
语法定义为:
concat(s1, s2,...sn) //该函数会将传入的参数连接起来返回合并的字符串类型的数据。如果其中一个参数为null,则返回值为null.
示例:
mysql> select concat('my','s','ql'); +-----------------------+ | concat('my','s','ql') | +-----------------------+ | mysql | +-----------------------+ 1 row in set (0.00 sec) mysql> select concat('my','s','ql',null); +----------------------------+ | concat('my','s','ql',null) | +----------------------------+ | NULL | +----------------------------+ 1 row in set (0.00 sec) mysql> select concat(curdate(), 12.2); +-------------------------+ | concat(curdate(), 12.2) | +-------------------------+ | 2016-08-2512.2 | +-------------------------+ 1 row in set (0.00 sec) //说明:将当前时间和数值12.2合并。即concat()函数不仅可以接受字符串参数,而且还可以接受其他类型参数。
concat_ws()的定义:
concat_ws(sep,s1,s2,...sn) //该函数与concat()相比,多了一个表示分隔符的seq参数,不仅将传入的其他参数连接起来,而且还会通过分隔符将各个字符串分割开来。 //分隔符可以是一个字符串,也可以是其他参数。如果分割符为null,则返回结果为null。函数会忽略任何分割符后的参数null.
示例:
mysql> select concat_ws('-','020','87658907'); +---------------------------------+ | concat_ws('-','020','87658907') | +---------------------------------+ | 020-87658907 | +---------------------------------+ 1 row in set (0.00 sec) mysql> select concat_ws(null,'020','87658907'); +----------------------------------+ | concat_ws(null,'020','87658907') | +----------------------------------+ | NULL | +----------------------------------+ 1 row in set (0.00 sec) //当分隔符为null时,则返回结果为null mysql> select concat_ws('-','020',null,'87658907'); +--------------------------------------+ | concat_ws('-','020',null,'87658907') | +--------------------------------------+ | 020-87658907 | +--------------------------------------+ 1 row in set (0.00 sec) //不是第一个参数的null将被忽略
1.2 比较字符串大小函数strcmp():
strcmp()定义为:
strcmp(str1,str2); //如果参数str1大于str2,返回1;如果str1小于str2,则返回-1;如果str1等于str2,则返回0;
示例:
mysql> select strcmp('abc','abd'),strcmp('abc','abc'),strcmp('abc','abb'); +---------------------+---------------------+---------------------+ | strcmp('abc','abd') | strcmp('abc','abc') | strcmp('abc','abb') | +---------------------+---------------------+---------------------+ | -1 | 0 | 1 | +---------------------+---------------------+---------------------+ 1 row in set (0.00 sec)
1.3 获取字符串长度函数length()和字符数函数char_length():
length()的定义如下:
length(str)
char_length(str)的定义如下:
char_length(str)
示例:
mysql> select length('mysql'),length('汉字'),char_length('mysql'),char_length('汉字'); +-----------------+----------------+----------------------+---------------------+ | length('mysql') | length('汉字') | char_length('mysql') | char_length('汉字') | +-----------------+----------------+----------------------+---------------------+ | 5 | 4 | 5 | 4 | +-----------------+----------------+----------------------+---------------------+ 1 row in set, 2 warnings (0.00 sec) //字符串‘MySQL'共有5个字符,但是占6个字节空间。这是因为每个字符串都是以\0结束。两个函数都是获取字符串的字符数而不是所占空间大小。
1.4 字母的大小写转换upper()和lower():
字母大小转换函数:upper(s); ucase(s);
字母小写转换函数:lower(s); lcase(s);
示例:
mysql> select upper('mysql'),ucase('mYsql'),lower('MYSQL'),lcase('MYsql'); +----------------+----------------+----------------+----------------+ | upper('mysql') | ucase('mYsql') | lower('MYSQL') | lcase('MYsql') | +----------------+----------------+----------------+----------------+ | MYSQL | MYSQL | mysql | mysql | +----------------+----------------+----------------+----------------+ 1 row in set (0.00 sec)
1.5 查找字符串:
mysql中提供了丰富的函数去查找字符串的位置。分别有find_in_set()函数、field()函数、locate()函数、position()函数和instr()函数。同时还提供了查找指定位置的字符串的函数elt()。
1.5.1 返回字符串位置的find_in_set()函数:
函数定义为:
find_in_set(str1,str2) //会返回在字符串str2中与str1相匹配的字符串的位置,参数str2字符串中将包含若干个用逗号隔开的字符串。
示例:
mysql> select find_in_set('mysql','oracle,mysql,db2'); +-----------------------------------------+ | find_in_set('mysql','oracle,mysql,db2') | +-----------------------------------------+ | 2 | +-----------------------------------------+ 1 row in set (0.00 sec)
1.5.2 返回指定字符串位置的field()函数:
函数定义为:
filed(str,str1,str2...) //返回第一个与字符串str匹配的字符串的位置。
示例:
mysql> select field('mysql','oracle','db2','redis','mysql'); +-----------------------------------------------+ | field('mysql','oracle','db2','redis','mysql') | +-----------------------------------------------+ | 4 | +-----------------------------------------------+ 1 row in set (0.00 sec)
1.5.3 返回子字符串相匹配的开始位置:
mysql中有三个函数可以获取子字符串相匹配的开始位置,分别是locate()、position()、instr()函数。
locate(str1,str) //返回参数str中字符串str1的开始位置
position(str1 in str) 和 instr(str,str1)
示例:
mysql> select locate('sql','mysql'),position('sql' in 'mysql'),instr('mysql','sql'); +-----------------------+----------------------------+----------------------+ | locate('sql','mysql') | position('sql' in 'mysql') | instr('mysql','sql') | +-----------------------+----------------------------+----------------------+ | 3 | 3 | 3 | +-----------------------+----------------------------+----------------------+ 1 row in set (0.00 sec)
1.5.4 返回指定位置的字符串的elt()函数:
函数语法为:
elt(n,str1,str2...);
示例:
mysql> select elt(1,'mysql','db2','oracle'); +-------------------------------+ | elt(1,'mysql','db2','oracle') | +-------------------------------+ | mysql | +-------------------------------+ 1 row in set (0.00 sec)
1.5.5