文章开始之前,先吐槽一下慕课网的手记编辑器,虽然采用的是Markdown语法编辑,但是支持的语法,实在是不够完善。尤其是表格,辛辛苦苦的弄了几个小时,预览也能够查看准确的效果,但是发布后,竟然没有解析出来,导致格式全部混乱了,又得重新编辑……希望慕课能早日解决这个问题,如果不支持,就不要预览显示出来,否则一旦发布,就全白忙活了。好了,吐槽结束,下面开始正文。
昨天复习了一下MySQL的常用数据类型,今天对MySQL的常用函数进行总结。
字符串函数CONCAT(str1,str2,...)
说明:连接str1,str2……为一个字符串。注意:任何字符串与NULL进行连接的结果都将是NULL。例如:
select CONCAT('ab','cd','ef'); -- 结果:abcdef
select CONCAT('ab','cd',null); -- 结果:NULL
INSERT(str,pos,len,newstr)
说明:用于字符串的替换,将字符串str从第pos位置(首位是1)开始,长度为len的子字符串,替换为字符串newstr。例如:
select INSERT('abcdef',1,4,'wwwwwww'); -- 结果: wwwwwwwef
LOWER(str)
说明:将字符串str转换为小写。例如:
select LOWER('Abc'); -- 结果:abc
UPPER(str)
说明:将字符串str转换为大写。例如:
select UPPER('Abc'); -- 结果:ABC
LEFT(str,len)
说明:返回字符串str最左边的len个字符,如果长度指定为NULL,结果将会返回NULL(mysql 5.7) 。例如:
select LEFT('abcdef',2); -- 结果:ab
RIGHT(str,len)
说明:返回字符串str最右边的len个字符。例如:
select RIGHT('abcdef',2); -- 结果:ef
LPAD(str,len,padstr)
说明:使用字符串padstr对原字符串str最左边进行填充,直到总的字符串长度为len。例如:
select LPAD('a',10,'1'); -- 结果:111111111a
RPAD(str,len,padstr)
说明:使用字符串padstr对原字符串str最右边进行填充,直到总的字符串长度为len。例如:
select RPAD('a',10,1); -- 说明:a111111111
LTRIM(str)
说明:去除字符串str左侧的空格
RTRIM(str)
说明:去除字符串str行尾的空格
REPEAT(str,count)
说明:返回str重复count次的结果。例如:
select REPEAT('good',2); -- 结果:goodgood
REPLACE(str,from_str,to_str)
说明:将字符串str中的所有出现的字符串from_str,替换成为to_str。例如:
select REPLACE('hello','l','x'); -- 结果:hexxo
STRCMP(expr1,expr2)
说明:比较字符串expr1和expr2的ASCII码值的大小,expr1>expr2返回1;expr1=expr2返回0;expr1<expr2返回-1。例如:
select STRCMP('a','b'); -- 结果:-1
SELECT STRCMP('c','b'); -- 结果:1
select STRCMP('a','a'); -- 结果:0
TRIM([remstr FROM] str)
说明:去掉字符串首尾空格
SUBSTRING(str,pos,len)
说明:截取字符串,返回从字符串str的pos位置开始(从1开始),len个字符长度的字符串。例如:
select SUBSTRING('abcdefg',1,3); -- 结果:abc
数值函数
ABS(X)
说明:返回数值X的绝对值。例如:
select ABS(-12); -- 结果: 12
CEIL(X)
说明:返回大于数值X的最小整数值。例如:
select CEIL(1.23); --结果:2
FLOOR(X)
说明:返回小于数值X的最大整数值。例如:
select FLOOR(1.23); -- 结果:1
MOD(N,M)
说明:返回N/M的模(取余数),如果有一个数为NULL,结果都为NULL。例如:
select MOD(5,2); -- 结果:1
select MOD(5,null); -- 结果:NULL
RAND()
说明:返回0~1内的随机值。例如:
select RAND(); -- 结果:0.1409339421809967
ROUND(X,D)
说明:返回数值X的四舍五入值,保留D位小数,如果不写D,默认为0,四舍五入后取整。例如:
select ROUND(1.6723,1); -- 结果:1.7
TRUNCATE(X,D)
说明:返回数值X截断为D位小数的结果,不会四舍五入,直接截断小数位。例如:
select TRUNCATE(1.21556,3); -- 结果:1.215
日期和时间函数
CURDATE()
说明:返回当前日期。例如:
select CURDATE(); -- 结果:2016-08-05
CURTIME()
说明:返回当前时间。例如:
select CURTIME(); -- 结果:20:35:56
NOW()
说明:返回当前的日期和时间。例如:
select NOW(); -- 结果:2016-08-05 20:36:16
UNIX_TIMESTAMP([date])
说明:返回日期date的UNIX时间戳,如果不指定date,默认是当前时间的UNIX时间戳。例如:
select UNIX_TIMESTAMP(); -- 结果:1470387231
FROM_UNIXTIME(unix_timestamp)
说明:返回UNIX时间戳的日期值,和UNIX_TIMESTAMP互为逆操作。例如:
select FROM_UNIXTIME(1470387231); -- 结果:2016-08-05 20:36:16
WEEK(date[,mode])
说明:返回日期date为一年中的第几周。例如:
select WEEK(NOW()); -- 结果:31
YEAR(date)
说明:返回日期date的年份。例如:
select YEAR(NOW()); -- 结果:2016
HOUR(time)
说明:返回time的小时值。例如:
select HOUR(NOW()); -- 结果:20
MINUTE(time)
说明:返回time的分钟值。例如:
select MINUTE(NOW());
MONTHNAME(date)
说明:返回date的英文月份名。例如:
select MONTHNAME(NOW()); -- 结果:August
DATE_FORMAT(date,format)
说明:返回按字符串format格式化日期date值。例如:
select DATE_FORMAT(NOW(),'%Y:%D:%M'); -- 结果:2016:8th:August
DATE_ADD(date,INTERVAL expr unit)
说明:返回一个日期或时间值加上一个时间间隔的值。INTERVAL 是间隔类型关键字,expr是一个表达式,对应后面的类型,unit是间隔类型。例如:
select DATE_ADD(NOW(),INTERVAL 2 DAY); -- 在今天加2天,如果输入负数就表示之前,结果:2016-08-07 20:46:19
select DATE_ADD(NOW(),INTERVAL '-2_3' YEAR_MONTH); -- 在当前时间减去2年3个月,即返回2年3个月前的的时间,结果:2014-05-05 20:46:36
DATEDIFF(expr1,expr2)
说明:返回起始时间expr1和结束时间expr2之间的天数。例如:
select DATEDIFF('2016-8-10',NOW()); -- 结果:5
其他常用函数
DATABASE()
说明:返回当前数据库名。例如:
select DATABASE();
VERSION()
说明:返回当前数据库版本。例如:
select VERSION(); -- 结果:5.7.12-log
USER()
说明:返回当前登录用户名。例如:
select USER(); -- 结果:root@localhost
INET_ATON(expr)
说明:返回IP地址的网络字节序表示,该函数主要用于IP的比较和查询,可以用来确定IP范围,避免IP中的字符“.”进行比较导致的错误。例如:
select INET_ATON('10.100.0.0'); -- 结果:174325760
INET_NTOA(expr)
说明:返回网络字节序数值代表的IP地址。 例如:
select INET_NTOA(174325760); -- 结果: 10.100.0.0
PASSWORD(str)
说明:返回字符串str的加密版本。 例如:
select PASSWORD('abc'); -- 结果: *0D3CED9BEC10A777AEC23CCC353A8C08A633045E
MD5(str)
说明:返回字符串str的MD5值。 例如:
select MD5('abc'); -- 结果: 900150983cd24fb0d6963f7d28e17f72
(持续更新……)
OK,以上就是今天总结的内容,花了几个小时的时间,终于弄好了这篇手记,设置好了自己喜欢的样式。
关于函数目前先记录这么多,后期有遇到再陆续补充。