数学函数
绝对值函数ABS(x)和返回圆周率的函数PI()
ABS(x)返回x的绝对值
求2,-3.3,和-33的绝对值
PI()返回圆周率π的值,默认的显示小数位数是6位
平方根函数SQRT(x)和求余函数MOD(x,y)
SQRT(x)返回非负数x的二次方根
求9,40,-49的二次方根
负数没有平方根,故-49的返回值是null
MOD(x,y)返回x被y除后的余数,也就是x除以y所得余数,mod()对于带有小数
部分的数值也起作用,他返回除法运算后的精确余数
对MOD(31,8),
MOD(234,10),MOD(45.5,6)进行求余运算
获取整数的函数CEIL(x),CEILING(x),FLOOR(x)
CEIL(x)和CEILING(x)意义相同,前者是后者的缩写,返回不小于x的最小整数值,
并不是四舍五入,返回值转化为一个BIGINT类型
-3.4为负数,不小于-3.4的最小整数为-3,3.1为正数,不小于3.1的最小整数为4
FLOOR(x)返回不大于x的最大整数
-3.4为负数,不大于-3.4的最大整数为-4,3.1为正数,不大于3.1的最大整数为3
获取随机数的函数RAND()和RAND(x)
RAND(x)返回一个随机浮点值v,范围在0到1之间(即0<=v<=1.0)
若指定一个整数参数x,则它被用作种子值,用来产生重复序列
通过RAND()+10,可以获取10到11之间的随机数,
不带参数x的RAND()产生的参数是不相同的,带参数的将会参数相同的随机数
函数ROUND(x),round(x,y),TRUNCATE(x,y)
round(x)返回最接近于参数x的整数,对x值进行四舍五入
四舍五入之后,只保留各个值的整数部分
round(x,y),返回最接近参数x的数,其值保留到小数点后的y位,
若y的值为负值,则保留到左边的y位,保留的小数点左边的相应位数
直接保存为0,不进行四舍五入
truncate(x,y)返回被舍去至小数点后y位的数字x,若y的值为0,
则结果不带小数点或者小数部分。若y的值为负数,则截去(归零)x小数
点左起第y位开始后面所有地位的值
rounf(x,y)在截取时会进行四舍五入,而truncate(x,y)直接进行截取,不会四舍五入
符号函数SIGN(x)
sign(x)返回参数的符号,x的值为负或正数时,返回结果分别是-1,0,1
幂运算函数POW(x,y),power(x,y),EXP(x)
pow(x,y)或者power(x,y)返回x的y次乘方的结果值
exp(x)返回e的x乘方
对数运算函数
LOG(x)返回x的自然对数,x相对于基数e的对数
对数定义域不能为负数,因此log(-3)返回结果为null
log10(x)返回x的基数为10的对数
角度与弧度相互转换的函数radians(x)和defrees(x)
使用radians将角度转换为弧度,
degrees(x)将参数x由弧度转换为角度
正弦函数sin(x)和反正弦函数asin(x)
sin(x)返回x的正弦,其中x为弧度值
asin(x)返回x的反正弦值,值必须在-1到1之间,否则会返回null
余弦函数cos(x)和反余弦函数ACOS(x)
cos(x)返回x的余弦,x为弧度值,cos与acos互为反函数
正切函数、反正切函数、余切函数
TAN(x)返回x的正切,其中x为给定的弧度值,
ATAN(x)返回x的反正切,即正切为x事务值
COT(x)返回x的余切,与tan互为倒数
字符串函数
计算字符串字符数的长度和字符串长度的函数
CHAR_LENGTH(str)返回值为字符串str所包含的字符个数,一个多字节字符算作一个单字符
LENGTH(str)返回值为字符串的字节长度,使用utf8(unicode的一种变
长字符编码,又称万国码)编码字符集时,一个汉字是两个字节,
一个数字或者字母算一个字节
合并字符串函数CONCAT(s1,s2,…)、CONCAT_WS(x,s1,s2,…)
CONCAT(s1,s2,...)返回结果为连接参数产生的字符串,可能有一个或者多个参数,
如果有一个参数值为null,返回值为null。
如果所有参数为非二进制字符串,则返回结果为非二进制字符串,如果参数中含
有一个二进制字符串,则返回结果为二进制字符串
concat_ws(x,s1,s2,...),CONCAT_WS代表concat with separator,是concat()的特殊形式,
第一个参数x是其它参数的分隔符,分隔符的位置放在要连接的两个字符串之间。
分隔符可以是一个字符串,也可以是其它参数,如果分割符是null,则结果是null,
函数会忽略任何分割符参数后的null值,即如果出现null,则忽略此null,继续拼接其它的。
替换字符串的函数INSERT(s1,x,len,s2)
Insert(s1,x,len,s2)返回字符串s1,其子字符串起始于x位置和被s2取代的
len字符,如果x超过字符串的长度,则返回原始字符串,假如len的长度大于
其它字符串的长度,则从位置x处开始替换,若任何一个参数为null,则返回值为null
起始位置小于1,大于s1的长度,均返回s1原字符串。
字母大小写转换函数
LOWER(str)或者LCASE(str)可以str字符串中字母字符全部转换成小写字母
UPPER或者UCASE可以将字符串中所有字母转化为大写
获取指定长度的字符串的函数LEFT(s,n)和RIGHT(s,n)
left(s,n)只有两个参数,第一个参数是原字符串,第二个参数是截止位置
left是左边的意思,函数的意思就是1开始,截取n个字符,或者说截取左边n个字符
right是右边的意思,含义同上
填充字符串的函数LPAD(s1,len,s2)和RPAD(s1,len,s2)
LPAD(s1,len,s2)返回字符串s1,其左边由字符串s2填补到len字符长度
假如s1的长度大于len,则返回值被缩短到len字符
RPAD(s1,len,s2)返回字符串s1,其右边由字符串s2填补到len字符长度
假如s1的长度大于len,则返回值被缩短到len字符
删除空格的函数LTRIM(s)、RTRIM(s)和TRIM(s)
LTRIM(s) 返回字符串s,字符串s的左侧字符被删除,右边空格不会被删除
RTRIM(s)返回字符串s,字符串s的右侧字符被删除,左边字符不会被删除
TRIM(s)返回字符串s,字符串s的两侧字符被删除,中间字符不会被删除
删除指定字符串的函数TRIM(s1 from s)
TRIM(s1 from s) 未指定s1的情况下,删除两端的空格
指定s1的情况下,删除s两端所有的子串s1
重复生成字符串的函数REPEAT(s,n)
REPEAT(s,n)返回一个s重复n次的字符串s,如果n小于等于0,则返回
一个空字符串,若s或者n为null,则返回null
空格函数SPACE(n)和替换函数REPLACE(s,s1,s2)
SPACE(n)返回由n个空格组成的字符串
replace(s,s1,s2)使用字符串s2替换s中的所有字符串s1
比较字符串大小的函数STRCMP(s1,s2)
strcmp(s1,s2) 若所有的字符串相同,则返回0,若第一个参数小于第二个,则返回-1,
其余情况返回1
获取子串的函数SUBSTRING(s,n,len)和MID(s,n,len)
substring(s,n,len)带有len参数的格式,从字符串s返回一个长度同len
字符相同的子字符串,起始于位置n。
如果n是负值,则子字符串的位置起始于字符串结尾的n字符,即倒数第n
个字符,而不是字符串的开头位置
substring函数与mid函数作用相同
如果对len使用一个小于1的值,则结果始终是空字符串
匹配字符串开始位置的函数
locate(str1,str),position(str1 in str),insert(str,str1)三个函数的作用相同,返回子
字符串str1在str中的开始位置
字符串的逆序函数
REVERSE(s)将字符串s反转,返回的字符串顺序和s的字符串顺序相反
返回指定位置的字符串的函数
ELT(N,字符串1,字符串2,字符串3,...,字符串N),若n等于1,
则返回值为字符串1,若n=2,则返回值为字符串2,,以此类推。
若N小于1或者大于参数的数目,则返回Null
返回指定字符串位置的函数FIELD(s,s1,s2,…)
Field(s,s1,s2,..)返回字符串在列表s1,s2,s3...中第一次出现的位置,
在找不到s的情况下,返回0,如果s的值为null,则返回值是0,
原因是null不能同任何值进行同等比较
返回子串位置的函数FIND_IN_SET(s1,s2)
FIND_IN_SET(s1,s2)返回字符串s1在字符串列表s2中出现的位置
字符串列表是一个由多个','分割的字符串组成的列表,如果s1不在s2中
或者s2为空字符串,则返回值为0,如果任意一个字符串为null,则返回值是null
选取字符串的函数make_set(x,s1,s2,…)
make_set(x,s1,s2,...)返回由x的二进制数指定的相应的相应位的字符串组成的字符串,s1对应比特1,
s2对应比特01,以此类推,s1,s2...中的null值不会被添加到结果中
1的二进制位0001,4的二进制值为0100,1与4进行或操作后是0101,从右往左第一位
和第三位为1.make_set(1,'a','b','c')返回第一个字符串;
make_set(1|4,'hello','nice','world')返回从左端开始的第1和第3
个字符组成的字符串;null值不会添加到结果中
时间和日期函数
获取当前日期和获取当前时间的函数
curdate()和current_date()函数作用相同,将当前日期安照'YYYY-MM-DD'或YYYYMMDD格式的值返回,
具体格式根据函数在字符串或是数字语境中而定。
通过下图结果 可以看到,两个函数的作用相同,都是获取系统当前日期,通过+0,将日期型转换为数值型。
CURRENT_TIME(),CURTIME()函数作用相同,将当前时间以HH:MM:SS或HHMMSS的格式返回,
具体格式根据字符串或是数字语境中而定。
获取当前日期和时间的函数
CURRENT_TIMESTAMP()、LOCALTIME()、NOW()和SYSDATE()4个函数的作用相同,
均返回当前日期和时间值,格式为'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS,具体格式根据
函数在字符串或数字语境中而定,四个函数返回的结果值是一致的
UNIX时间戳函数
unix_timestamp(date)如无参数调用,则返回一个unix时间戳('1970-01-01 00:00:00'GMT之后的秒数)
作为无符号整数。其中GMT(Greenwich mean time)为格林尼治标准时间。若用date来调用UNIX_TIMESTAMP(),
他会参数值以'1970-01-01 00:00:00'GMT后的秒数的形式返回。date可以是一个DATE字符串、DATETIME字符串、
TIMESTAMP或一个当地时间的YYMMDD或YYYYMMDD格式的数字。
FROM_UNIXTIME(date)函数把unix时间戳转换为普通格式的时间,与
UNIX_TIMESTAMP(date)函数互为反函数
返回UTC日期的函数和返回UTC时间的函数
UTC_DATE()返回当前UTC(世界标准世界)日期值,其格式为'YYYY-MM-DD'或YYYYMMDD,
具体格式取决于函数是否用在字符串或者数字语境中。UTC_DATE()返回值为当前时区的日期值。
UTC_TIME()返回当前时区的时间值,其格式为'HH:MM:SS'或者HHMMSS,具体格式取决于函数是否
用在字符串或者数字语境中。
获取月份的函数MONTH(date)和MONTHNAME(date)
MONTH(date)返回date对应的月份,范围值从1到12
MONTHNAME(date)函数返回日期date对应月份的全英文名
获取星期的函数DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d)
dayname(d)函数返回d对应的工作日的英文名称,例如sunday\monday等
dayofweek(d)函数返回d对应的一周的索引位置,1表示周日,2表示周一,...7表示周六
weekday(d)返回d对应的工作日索引,0表示周一,1表示周二...6表示周日
获取星期数的函数WEEK(d)和WEEKOFYEAR(d)
WEEK(d)计算日期d是一年中的第几周
WEEKOFYEAR(d)计算某一天是一年中的第几周,相当于week(d,3)
获取天数的函数DAYOFYEAR(d),DAYOFMONTH(d)
DAYOFYEAR返回一年中的第几天,范围从1到366
DAYOFMONTH返回一个月的第几天,范围从1到31
获取年份、季度、小时、分钟和秒钟的函数
YEAR(d)返回d对应的年份,范围从1970-2069
当年份只有两位时,00-69转换为2000-2069,70-99转换为1970-1999
quarter(date) 返回date对应一年中的季度值,范围是1-4
minute(time)返回time对应的分钟数,范围是0-59
second(time)返回time对应的秒数
获取日期的指定值的函数EXTRACT(type from date)
时间与秒钟转换的函数
time_to_sec(time) 返回已转化为秒的time参数,转换公式为:小时*3600+分钟*60+秒
sec_to_time(seconds)返回被转换为小时、分钟和秒数的seconds参数值,其格式为'HH:MM:SS'或HHMMSS,
具体格式根据该函数是否用在字符串或者数字语境中而定
计算日期和时间的函数
计算日期和时间的函数有:DATE_ADD()、ADDDATE(),DATE_SUB()、SUB_DATE(),
ADDTIME()、SUBTIME()和DATE_DIFF()。
DATE_ADD(date,INTERVAL expr type)和DATE_SUB(date,INTERVAL expr type),其中
date是一个DATETIME或者date值,用来指定起始时间。expr是一个表达式,用来指定从起始日期
添加或者减去的时间间隔值,expr是一个字符串,对于负值的时间间隔,它可以以一个'-'开头
type是关键词,它表示了表达式被解释的方式。若date参数是一个DATE值,计算会包括YEAR、MONTH、DAY部分
即(没有时间部分),其结果是一个DATE值,否则将是一个DATETIME值,DATE_ADD和ADDDATE()两个
函数作用相同,执行日期的加运算。
将日期和时间格式化的函数
DATE_FORMAT(date,format)根据format指定的格式格式化date值,
条件判断函数
IF(expr,v1,v2)
如果表达式expr的结果值为true,则返回v1,如果为false,则返回v2。IF()的返回值为数字值或字符串值,
具体情况视其所在语境而定
IFNULL(v1,v2)函数
IFNULL(v1,v2)加入v1不为null,则IFNULL()的返回值为V1;否则其返回值为v2。
IFNULL的返回值是数字还是字符串,根据其具体的语境而定。
CASE函数
CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2][ELSE rn] END
该函数表示,如果expr的值等于某个vn,则返回对应位置THEN后面的结果。
如果与所有值都不相等,则返回ELSE后面的rn
CASE WHEN v1 THEN r1 [WHEN v2 then r2] [else rn] end;
该函数表示,当某个vn为true时,返回对应then后面的结果
系统信息函数
MySQL中的系统信息有:数据库的版本号、当前用户名和连接数、系统字符集、最后一个自动生成的ID值等。
获取MySQL版本号、连接数和数据库名的函数
VERSION()返回指示MySQL服务器版本的字符串,这个字符串使用utf8字符集
connection_id()返回MySQL数据库当前连接的次数,每个连接都有自己唯一的ID
show processlist;show full processlist();
processlist命令的输出结果显示了有哪些线程在运行,不仅可以查看当前所有的连接数,
还可以查看当前的连接状态,帮助识别出有问题的查询语句等。
如果是root账号,能看到所有用户的当前连接。如果是其它普通账号,则只能看到自己占用的连接。
未加full,只列出前100条,加full,则列出全部结果。
database()和schema()函数返回使用utf8字符集的默认(当前)数据库名
获取用户名的函数
USER()、CURRENT_USER()、SYSTEM_USER()和SESSION_USER()
这几个函数返回当前被MySQL服务器验证的用户名和主机名组合
获取字符串的字符集和排序方式的函数
CHARSET(str)返回字符串str自变量的字符集
COLLATION(str)返回字符串str的排列方式,使用不同字符集时,字符串的排列方式不同。
获取最后一个自动生成的ID值的函数
SELECT LAST_INSERT_ID();
加/解密函数
加密函数MD5(str)
MD5(str)为字符串算出一个MD5 128比特校验和。该值以32位十六进制数字的
二进制字符串形式返回,若参数为null,则返回null。
加密函数ENCODE(str,pswd_str)
ENCODE(str,pswd_str)使用pswd_str作为密码,加密str。使用DECODE()
解密结果,是一个和str相同的二进制字符串
select encode('secret','cry'),length(encode('secret','cry'));
解密函数DECODE(crypt_str,pswd_str)
select decode(encode('secret','cry'),'cry');
ENCODE与decode互为反函数
其它函数
格式化函数FORMAT(x,n)
FORMAT(x,n)将数字x格式化,并以四舍五入的方式保留小数点后n位,结果以字符串的形式返回。
若n为0,则返回结果不带小数部分。
不同进制的数字进行转换的函数
conv(N,from_base,to_base)函数进行不同进制数间的转换。返回值为N的字符串表示,由
from_base进制转换为to_base进制。如有任意一个参数为null,则返回值为null。自变量n被理解为
一个整数,但是可以被指定为一个整数或者字符串。最小基数,而最大基数则是36
IP地址与数字相互转换的函数
INET_ATON(expr)给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数。
地址可以是4或8bit地址
产生的数字按照网络字节顺序,如图所示例子,计算方法为209*256^3+41*256^2+123*256+12
INET_NTOA(expr)给定一个数字网络地址(4或8bit),返回作为字符串的该地址的点地址表示。
INET_NTOA和INET_ATON互为反函数
改变字符集的函数
CONVERT(...USING...)带有USING的CONVERT()函数被用来在不同的字符集之间转化数据
改变数据类型的函数
CAST(x,AS type)和CONVERT(x,type)函数将一个类型的值转换为另一个类型的值
可以转换的type有:BINARY()、CHAR(n)、DATE、TIME、DATETIME、DECIMAL、
SIGNED、UNSIGNED。
加锁函数和解锁函数
GET_LOCK(str,timeout)
RELEASE_LOCK(str)
IS_FREE_LOCK(str)
IS_USED_LOCK(str)