一. 使用字符串函数
SELECT CONCAT('My','S','QL') 合并后字符串;
SELECT CONCAT(CURDATE(),12.34) 合并后字符串;
SELECT CONCAT('My','S','QL',NULL) 合并后字符串;
1.2 函数CONCAT_WS()
CONCAT_WS(SEP,S1,S2,…SN)函数与CONCAT()相比,多了一个表示分割符的SEP参数,即不仅将传入的其他参数连接起来,而且还会通过分割符将各个字符串分割开。分隔符可以是一个字符串,也可以是其他参数。如果分隔符为NULL,则返回结果为NULL。函数会忽略任何分隔符参数后的NULL值。
SELECT CONCAT_WS('-','029',88461234) 合并后字符串
执行SQL函数CONCAT_WS(),当分割符参数的值为NULL时,具体SQL语句如下:
SELECT CONCAT_WS(NULL,'029',88461234) 合并后字符串;
执行结果显示,当所传入的第一个参数值为NULL,返回的结果值将为NULL,因此返回结果为NULL。
执行SQL函数CONCAT_WS(),当分割符参数后值存在NULL时,具体SQL语句如下:
SELECT CONCAT_WS('-','029',NULL,88461234) 合并后字符串;
执行结果显示,当所传入的参数(除第一个参数外)值中有NULL,返回的结果值将忽略NULL,因此返回结果为029-88461234。
2. 比较字符串大小函数STRCMP()
STRCMP(str1,str2)函数用来比较字符串参数str1和str2,如果参数str1大于str2,则返回结果1;如果参数str1小于str2,则返回结果-1;如果参数str1等于str2,则返回结果0。
SELECT STRCMP('abc','abd'), STRCMP('abc','abc'), STRCMP('abc','abb');
3. 获取字符串长度函数LENGTH()和字符数函数CHAR_LENGTH()
通过函数LENGTH()和CHAR_LENGTH()获取字符串的长度。LENGTH(str)函数会获取传人的参数str的长度,CHAR_LENGTH(str)函数会获取传人的参数str的字符串。
3.1 函数LENGTH()
SELECT 'MySQL' 英文字符串,LENGTH('MySQL') 字符串字符长度,'常建功' 中文字符串,LENGTH('常建功') 字符串字符长度
由于一个英文字符占一个字节,所以字符串'MySQL'的长度为5,由于一个汉字字符占3个字符(有的书说是2个),所以字符串'常建功'的长度为6。
3.2 函数CHAR_LENGTH()
SELECT 'MySQL' 英文字符串,CHAR_LENGTH('MySQL') 字符串字符长度,'常建功' 中文字符串,CHAR_LENGTH('常建功') 字符串字符长度
字符串'MySQL'共有5个字符,但是占有6个字节空间。这是因为每个字符串都会以\0结束,结束符\0也会占用一个字节空间。
SELECT 'mysql' 字符串,UPPER('mysql') 转换后字符串,UCASE('mysql') 转换后字符串;
4.2 函数LOWER()和LCASE()函数会将字符串中的所有字母转换成小写字母。
SELECT 'MYSQL' 字符串,LOWER('MYSQL') 转换后字符串,LCASE('MYSQL') 转换后字符串;
5. 查找字符串
5.1 返回字符串位置的函数FIND_IN_SET() 。
通过函数FIND_IN_SET(str1,str2)获取相匹配字符串的位置,该函数会返回在字符串str2中与str1相匹配的字符串的位置,参数str2字符串中将包含若干个用逗号隔开的字符串。
SELECT FIND_IN_SET('MySQL','orcle,sql server,MySQL') 位置;
5.2 返回指定字符串位置的函数FIELD()
通过函数FIELD(str,str1,str2…) 获取相匹配字符串的位置。该函数将会返回第一个与字符串str匹配的字符串的位置。
SELECT FIELD('MySQL','orcle','sql server','MySQL') 位置;
5.3 返回子字符串相匹配的开始位置
可以通过三个函数获取子字符串相匹配的开始位置,它们分别为函数LOCATE()、POSITION()和INSTR()。
LOCATE(str1,str) 函数将会返回参数str中字符串str1的开始位置。其他两个函数定义如下:POSITION(str1 IN str) INSTR(str,str1)。
SELECT LOCATE('SQL','MySQL') 位置, POSITION('SQL' IN 'MySQL') 位置, INSTR('MySQL','SQL') 位置;
5.4 返回指定位置的字符串的函数ELT()
通过函数ELT(n,str1,str2…)获取指定位置的字符串,该函数将会返回第n个字符串。
SELECT ELT(1,'MySQL','orcle','sql server') 第1个位置的字符串;
5.5 选择字符串的函数MAKE_SET()
可以通过函数MAKE_SET(num,str1,str2…strn)获取字符串,该函数首先会将数值num转换成二进制数,然后按照二进制数从参数str1,str2,……,strn中选取相应的字符串。在通过二进制数来选择字符串时,会从右到左的顺序读取该值,如果值为1值选择该字符串,否则将不选择该字符串。
SELECT BIN(5) 二进制数,MAKE_SET(5,'MySQL','Oracle','SQL Server','PostgreSQL') 选取后的字符串, BIN(7) 二进制数,MAKE_SET(7,'MySQL','Oracle','SQL Server','PostgreSQL') 选取后的字符串;
6. 从现有字符串中截取子字符串
在MySQL中提供了丰富的函数去实现截取子字符串功能,分别为函数LEFT()、函数RIGHT()、函数SUBSTRING()和函数MID()。
6.1 从左边或右边截取子字符串
LEFT(str,num):返回字符串str中的包含前num个字母(从左边数)的字符串。
RIGHT(str,num):返回字符串str中的包含后num个字母(从右边数)的字符串。
SELECT 'MySQL' 字符串,LEFT('MySQL',2) 前两个字符,RIGHT('MySQL',3) 后三个字符;
6.2 截取指定位置和长度子字符串
SUBSTRING(str,num,len):返回字符串str中的第num个位置开始长度为len的子字符串。
MID(str,num,len)
SELECT 'oraclemysql' 字符串,SUBSTRING('oraclemysql',7,5) 截取子字符串,MID('oraclemysql',7,5) 截取子字符串;
在MySQL中提供了丰富函数去实现去除字符串空格功能,分别为函数LTRIM()、函数RTRIM()和函数TRIM()。LTRIM(str)去除字符串开始处空格,RTRIM(str)去除字符串结束处空格,TRIM(str)去除字符串首尾空格。
SELECT CONCAT('-',' MySQL','-') 原来字符串,CHAR_LENGTH(CONCAT('-',' MySQL','-')) 原来字符串长度, CONCAT('-',LTRIM(' MySQL'),'-') 处理后字符串,CHAR_LENGTH(CONCAT('-',LTRIM(' MySQL'),'-')) 处理后字符串串长度
SELECT '这是MySQL数据库管理系统' 字符串, INSERT('这是MySQL数据库管理系统',3,5,'Oracle') 转换后字符串;
执行SQL函数INSERT(),当替换的起始位置大于字符串长度,具体SQL语句如下:
SELECT '这是MySQL数据库管理系统' 字符串, CHAR_LENGTH('这是MySQL数据库管理系统') 字符串字符数, INSERT('这是MySQL数据库管理系统',16,15,'Oracle') 转换后字符串;
执行SQL函数INSERT(),当所要替换的长度大于原来字符串中所剩字符串的长度,则从起始位置开始进行全部替换,具体SQL语句如下:
SELECT '这是MySQL数据库管理系统' 字符串,CHAR_LENGTH('MySQL数据库管理系统') 剩余字符数, INSERT('这是MySQL数据库管理系统',3,15,'Oracle') 转换后字符串;
REPLACE(str,substr,newstr)):该函数会将字符串str中的子字符串substr用字符串newstr来替换。
SELECT '这是MySQL数据库管理系统' 原字符串, REPLACE('这是MySQL数据库管理系统','MySQL','Oracle') 替换后字符串;
二. 使用数值函数
SELECT RAND(),RAND(),RAND(3),RAND(3);
SELECT CEIL(4.3),CEIL(-2.5),CEILING(4.5),CEILING(-2.5)
SELECT FLOOR(4.3),FLOOR(-2.5);
3. 截取数值函数
有时候需要对数值的小数位数进行截取,通过函数TRUNCATE()函数实现截取操作。
TRUNCATE(x,y):返回数值x保留到小数点后y位的值。
SELECT TRUNCATE(903.53567,2),TRUNCATE(903.53567,-1);
4. 四舍五入函数
ROUND(x):返回数值x经过四舍五入操作后的数组。
ROUND(x,y):返回数值x保留到小数点后y位的值,在具体截取数值时需要进行四舍五入的操作。
SELECT ROUND(903.53567),ROUND(-903.53567), ROUND(903.53567,2),ROUND(903.53567,-1);
三. 使用日期和时间函数
SELECT NOW() now方式,CURRENT_TIMESTAMP() timestamp方式, LOCALTIME() localtime方式,SYSDATE() systemdate方式;
1.2 获取当前日期
可以通过两个函数获取当前日期,它们分别是CURDATE()和CURRENT_DATE()函数。
SELECT CURDATE() CURDATE方式,CURRENT_DATE() CURRENT_DATE方式;
1.3 获取当前时间
可以通过两个函数获取当前日期,它们分别是CURTIME()和CURRENT_TIME()函数。
SELECT CURTIME() CURTIME方式,CURRENT_TIME() CURRENT_TIME方式;
SELECT NOW() 当前时间, UNIX_TIMESTAMP(NOW()) unix格式, FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())) 普通格式;
SELECT NOW() 当前时间, UNIX_TIMESTAMP() unix格式, UNIX_TIMESTAMP(NOW()) unix格式;
SELECT NOW() 当前日期和时间, UTC_DATE() UTC日期, UTC_TIME() UTC时间;
3. 获取日期和时间各部分值
SELECT NOW() 当前日期和时间, YEAR(NOW()) 年, QUARTER(NOW()) 季度, MONTH(NOW()) 月, WEEK(NOW())星期, DAYOFMONTH(NOW()) 天, HOUR(NOW()) 小时, MINUTE(NOW()) 分, SECOND(NOW()) 秒;
4. 计算日期和时间的函数
SELECT NOW() 当前日期和时间, TO_DAYS(NOW()) 相隔天数, FROM_DAYS(TO_DAYS(NOW())) 一段时间后日期和时间, DATEDIFF(NOW(),'2000-12-01') 相隔天数;
一. 使用系统信息函数
SELECT VERSION() 版本号, DATABASE() 数据库名, USER() 用户名;
CREATE TABLE t_autoincrement ( id INT(11) NOT NULL AUTO_INCREMENT UNIQUE ); INSERT INTO t_autoincrement VALUES(NULL); INSERT INTO t_autoincrement VALUES(NULL); INSERT INTO t_autoincrement VALUES(NULL); INSERT INTO t_autoincrement VALUES(NULL); SELECT LAST_INSERT_ID();
3. 其他函数
流程函数:
IF(value,t f) |
如果value是真,返回t,否则返回f |
IFNULL(value1,value2) |
如果value1不为空返回value1,否则返回value2 |
CASE WHEN [value1] THEN[result1]…ELSE[default] END |
如果value1是真,返回result1,否则返回default |
CASE [expr]WHEN[value1] THEN[result1]…ELSE[default] END |
如果expr等于value1,返回result1,否则返回default |
实现特殊功能的函数:
函 数 |
作 用 |
PASSWORD(str) |
实现对字符串str进行加密 |
FORMAT(x,n) |
实现将数字x进行格式化,保留n位小数 |
INET_ATON(ip) |
实现将IP地址转换成数字 |
INET_NTOA(x) |
实现将数字转换成IP |
GET_LOCT(name,time) |
创建一个持续时间为time的名为name的锁 |
RELEASE_LOCT(name) |
为名为name的锁进行解锁 |
BENCHMARK(count,expr) |
实现将表达式重复执行count次 |
CONVERT(s USING cs) |
实现将字符串s的字符集变成cs |
CONVERT(x,type) |
实现将x变成type类型 |