ABS(x)
ABS(x)返回X的绝对值。
PI()
PI()返回圆周率的值。默认的显示小数位数是6位。
SQRT(x)
SQRT(x)返回非负数x的二次方根。当x为负数时,返回结果为NULL。
MOD(x,y)
MOD(x,y)返回x被y除后的余数,MOD()对于带有小数部分的数值也起作用,返回除法运算后的精确余数。
CEIL(x)和CEILING(x)
CEIL(x)和CEILING(x)的意义相同,返回不小于x的最小整数值,返回值转化为一个BIGINT。
FLOOR(x)
FLOOR(x)返回不大于x的最大整数值,返回值转化为一个BIGINT。
ROUND(x)
ROUND(x)返回最接近于参数x的整数,对x值进行四舍五入。
ROUND(x,y)
ROUND(x,y)返回最接近于参数x的数,其值保留到小数点后面y位,若y为负值,则将保留x值到小数点左边y位。
TRUNCATE(x,y)
TRUNCATE(x,y)返回被舍去至小数点后y位的数字x。若y的值为0,则结果不带有小数点或不带有小数部分。若y为负数,则截去(归零) x 小数点左起第y位 开始后面所有低位的值。
提示:ROUND(x,y) 函数在截取值的时候会四舍五入,而 TRUNCATE(x,y) 直接截取值,并不进行四舍五入。
POW(x,y)和POWER(x,y)
POW(x,y)或者POWER(x,y)函数返回x的y次乘方结果值。
EXP(x)
EXP(x)返回e的x次乘方后的值。
LOG(x)
LOG(x)返回x的自然对数,x相对于基数e的对数。对数定义域不能为负数,若x为负数,则返回结果NULL。
LOG10(x)
LOG10(x)返回x相对于基数10的对数。
RADIANS(x)
RADIANS(x)将参数x由角度转化为弧度。
DEGREES(x)
DEGREES(x)将参数x由弧度转化为角度。
SIN(x)
SIN(x)返回x的正弦值,其中x为弧度值。
ASIN(x)
ASIN(x)返回x的反正弦,即正弦为x的值。若x不在 -1到1 的范围之内,则返回NULL。
COS(x)
COS(x)返回x的余弦值,其中x为弧度值。
ACOS(x)
ASIN(x)返回x的反余弦,即余弦为x的值。若x不在 -1到1 的范围之内,则返回NULL。
正切函数TAN(x)
TAN(x)返回x的正切,其中x为给定的弧度值。
反正切函数ATAN(x)
ATAN(x)返回x的反正切,即正切为x的值。
余切函数COT(x)
COT(x)返回x的余切。
CHAR_LENGTH(str)
CHAR_LENGTH(str)返回值为字符串str所包含的字符个数。一个多字节字符算作一个单字符。
LENGTH(str)
LENGTH(str)返回值为字符串的字节长度,使用utf8(UNICODE的一种变长字符编码,又称万国码)编码字符集时,一个汉字是3个字节,一个数字或字母算一个字节。
CONCAT(s1,s2,...)
CONCAT(s1,s2,...)返回结果为连接参数产生的字符串,或许有一个或多个参数。任何一个参数为NULL,则返回值为NULL。如果所有参数均为非二进制字符串,则结果为非二进制字符串。如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。
CONCAT_WS(x,s1,s2,...)
在CONCAT_WS(x,s1,s2,...)中,CONCAT_WS代表CONCAT With Separator,是CONCAT() 的特殊形式;第一个参数x是其他参数的分隔符,分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其他参数。 如果分隔符为NULL,则结果为NULL。函数会忽略任何分隔符参数后的NULL值。
INSERT('opd',1,2,'abc')
执行后返回字符串 'abcd'。LOWER(str)和LCASE(str)
LOWER(str)或者LCASE(str)可以将字符串str中的字母字符全部转换成小写字母。
UPPER(str)或者UCASE(str)
UPPER(str)或者UCASE(str)可以将字符串str中的字母字符全部转换成大写字母。
LEFT(s,n)
LEFT(s,n)返回字符串s开始的最左边n个字符。
RIGHT(s,n)
RIGHT(s,n)返回字符串s开始的最右边n个字符。
LPAD(s1,len,s2)
LPAD(s1,len,s2)返回字符串s1,其左边由字符串s2填补到len字符长度。若s1的长度大于len,则返回值被缩短至len字符长度。
RPAD(s1,len,s2)
RPAD(s1,len,s2)返回字符串s1,其右边由字符串s2填补到len字符长度。若s1的长度大于len,则返回值被缩短至len字符长度。
LTRIM(s)
LTRIM(s)返回字符串s,字符串左侧空格字符被删除。
RTRIM(s)
RTRIM(s)返回字符串s,字符串右侧空格字符被删除。
TRIM(s)
TRIM(s)删除字符串s两侧的空格。
SPACE(n)
SPACE(n)返回一个由n个空格组成的字符串。
REPLACE(s,s1,s2)
REPLACE(s,s1,s2)使用字符串s2替代字符串s中所有的字符串s1。
SUBSTRING(s,n,len)
SUBSTRING(s,n,len)带有len参数的格式,从字符串s返回一个长度同len字符相同的子字符串,起始于位置n。也可能对n使用一个负值,则子字符串的位置起始于字符串结尾的n字符,即倒数第n个字符,而不是字符串的开头位置。
MID(s,n,len)
MID(s,n,len)与SUBSTRING(s,n,len)的作用相同。
MAKE_SET(0101,'a','b','c')
的执行结果为 'a,c'。CURDATE()和CURRENT_DATE()
CURTIME()和CURRENT_TIME()
UNIX_TIMESTAMP(date)
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)
FROM_UNIXTIME(date)函数把UNIX时间戳转换为普通格式的时间。输入语句如下:
FROM_UNIXTIME('1614498353')
UTC_DATE()
UTC_DATE( )函数返回当前UTC(世界标准时间)日期值,其格式为 ‘YYYY-MM-DD’ 或 YYYYMMDD,具体格式取决于函数是用在字符串还是数字语境中。
UTC_TIME()
UTC_TIME( )函数返回当前UTC(世界标准时间)时间值,其格式为 ‘HH:MM:SS’ 或 HHMMSS,具体格式取决于函数是用在字符串还是数字语境中。
MONTH(date)
MONTH(date)函数返回date对应的月份,值为1~12。
MONTHNAME(date)
MONTHNAME(date)函数返回日期date对应月份的英文全名。
DAYNAME(d)
DAYNAME(d) 函数返回d对应的工作日的英文名称,例如Sunday、Monday等。
DAYOFWEEK(d)
DAYOFWEEK(d) 函数返回d对应的一周中的索引(位置):1表示周日,2表示周一,......,7表示周六。
WEEKDAY(d)
WEEKDAY(d) 返回d对应的工作日索引:0表示周一,1表示周二,......,6表示周日。
WEEK(d)
WEEK(d) 计算日期d是一年中的第几周。WEEK(d,Mode) 的双参数形式允许指定该星期是否起始于周日或周一,以及返回值的范围是否为0~53或1~53。若Mode参数被省略,则使用default_week_format系统自变量的值。MySQL中该值默认为0。WEEK函数中Mode参数取值如下表所示。
Mode | 一周的第一天 | 范围 | Week 1 为第一周 |
---|---|---|---|
0 | 周日 | 0~53 | 本年度中有一个周日 |
1 | 周一 | 0~53 | 本年度中有3天以上 |
2 | 周日 | 1~53 | 本年度中有一个周日 |
3 | 周一 | 1~53 | 本年度中有3天以上 |
4 | 周日 | 0~53 | 本年度中有3天以上 |
5 | 周一 | 0~53 | 本年度中有一个周一 |
6 | 周日 | 1~53 | 本年度中有3天以上 |
7 | 周一 | 1~53 | 本年度中有一个周一 |
WEEKOFYEAR(d)
WEEKOFYEAR(d) 计算某天位于一年中的第几周,范围是1~53,相当于WEEK(d,3)。
DAYOFYEAR(d)
DAYOFYEAR(d) 函数返回d是一年中的第几天,范围是1~366。
DAYOFMONTH(d)
DAYOFMONTH(d) 函数返回d是一个月中的第几天,范围是1~31。
YEAR(date)
YEAR(date) 返回date对应的年份,范围是1970~2069。
提示:‘ 0~69 ’ 转换为 ’ 2000~2069 ‘ ,’ 70~99 ‘ 转换为 ’ 1970~1999 ‘。
QUARTER(date)
QUARTER(date) 返回date对应的一年中的季度值,范围是1~4。
MINUTE(time)
MINUTE(time) 返回time对应的分钟数,范围是0~59。
SECOND(time)
SECOND(time) 返回time对应的秒数,范围是0~59。
EXTRACT(type FROM date) 函数所使用的时间间隔类型说明符与DATE_ADD( ) 或DATE_SUB( ) 的相同,但它从日期中提取一部分,而不是执行日期运算。语法格式如下所示。
EXTRACT(YEAR_MONTH FROM '2011-07-12 01:02:03')
上述SQL语句为获取年和月份。执行后返回结果为201107。
TIME_TO_SEC(time)
TIME_TO_SEC(time) 返回已转化为秒的time参数。转换公式为:小时x3600+分钟x60+秒。
SEC_TO_TIME(seconds)
SEC_TO_TIME(seconds) 返回被转化为小时、分钟和秒数的seconds参数值,其格式为 ’HH:MM:SS‘ 或 HHMMSS,具体格式根据该函数是用在字符串还是数字语境中而定。
计算日期和时间的函数有DATE_ADD()、ADDDATE()、DATE_SUB()、SUBDATE()、ADDTIME()、SUBTIME() 和 DATE_DIFF()。
在DATE_ADD(date,INTERVAL expr type) 和 DATE_SUB(date,INTERVAL expr type) 中,date是一个DATETIME或DATE值,用来指定起始时间;expr是一个表达式,用来指定从起始日期添加或减去的时间间隔值,对于负值的时间的间隔,它可以以一个负号 ’-‘ 开头;type为关键词,指定表达式被解释的方式。
MySQL中计算日期和时间的格式如下表所示:
type值 | 预期的expr格式 |
---|---|
MICROSECOND | MICROSECONDS |
SECOND | SECONDS |
MINUTE | MINUTES |
HOUR | HOURS |
DAY | DAYS |
WEEK | WEEKS |
MONTH | MONTHS |
QUARTER | QUARTERS |
YEAR | YEARS |
SECOND_MICROSECOND | 'SECONDS.MICROSECONDS' |
MINUTE_MICROSECOND | 'MINUTES.MICROSECONDS' |
MINUTE_SECOND | 'MINUTES:SECONDS' |
HOUR_MICROSECOND | 'HOURS.MICROSECONDS' |
HOUR_SECOND | 'HOURS:MINUTES:SECONDS' |
HOUR_MINUTE | 'HOURS:MINUTES' |
DAY_MICROSECOND | 'DAYS.MICROSECONDS' |
DAY_SECOND | 'DAYS HOURS:MINUTES:SECONDS' |
DAY_MINUTE | 'DAYS HOURS:MINUTES' |
DAY_HOUR | 'DAYS HOURS' |
YEAR_MONTH | 'YEARS-MONTHS' |
若date参数是一个DATE值,计算只会包括YEAR、MONTH和DAY部分(没有时间部分),其结果是一个DATE值;否则,结果将是一个DATETIME值。
提示:DATE_ADD和DATE_SUB在指定修改的时间段,也可以指定负值,负值代表相减,即返回以前的日期和时间。
DATE_FORMAT()
DATE_FORMAT(date,format) 根据format指定的格式显示date值。主要format格式如下表所示。
说明符 | 说明 |
---|---|
%a | 工作日的缩写名称(Sun...Sat) |
%b | 月份的缩写名称(Jan...Dec) |
%c | 月份,数字形式(0...12) |
%D | 带有英语后缀的该月日期(0th,1st,2nd,3rd,...) |
%d | 该月日期,数字形式(00...31) |
%e | 该月日期,数字形式(0...31) |
%f | 微秒(000000...999999) |
%H | 以2位数表示24小时(00...23) |
%h,%I | 以2位数表示12小时(01...12) |
%i | 分钟,数字形式(00...59) |
%j | 一年中的天数(001...366) |
%k | 以24(0...23)小时表示时间 |
%l | 以12(1...12)小时表示时间 |
%M | 月份名称(January...December) |
%m | 月份,数字形式(00...12) |
%p | 上午(AM)或下午(PM) |
%r | 时间,12小时制(小时hh:分钟mm:秒数ss 后加AM或PM) |
%S,%s | 以2位数形式表示秒(00...59) |
%T | 时间,24小时制(小时hh:分钟mm:秒数ss) |
%U | 周(00...53),其中周日为每周的第一天 |
%u | 周(00...53),其中周一为每周的第一天 |
%V | 周(01...53),其中周日为每周的第一天;和%X同时使用 |
%v | 周(01...53),其中周日为每周的第一天;和%x同时使用 |
%W | 工作日名称(Sunday...Saturday) |
%w | 一周中的每日(0=周日...6=周六) |
%X | 该周的年份,其中周日为每周的第一天;数字形式,4位数;和%V同时使用 |
%x | 该周的年份,其中周一为每周的第一天;数字形式,4位数;和%v同时使用 |
%Y | 4位数形式表示年份 |
%y | 2位数形式表示年份 |
%% | ‘%’ 文字字符 |
TIME_FORMAT()
TIME_FORMAT(time,format) 根据format字符串安排time值的格式。format字符串可能仅会处理小时、分钟和秒的格式说明符,其他说明符产生一个NULL值或0。若time值包含一个大于23的小时部分,则 %H 和 %k 小时格式说明符会产生一个 大于(0...23) 的通常范围的值。
GET_FORMAT()
GET_FORMAT(val_type,format_type) 返回日期时间字符串的显示格式,val_type表示日期数据类型,包括DATE、DATETIME和TIME;format_type表示格式化显示类型,包括EUR、INTERVAL、ISO、JIS、USA。GET_FORMAT根据两个值的类型组合返回的字符串显示格式如下表所示。
值类型 | 格式化类型 | 显示格式字符串 |
---|---|---|
DATE | EUR | %d.%m.%Y |
DATE | INTERVAL | %Y%m%d |
DATE | ISO | %Y-%m-%d |
DATE | JIS | %Y-%m-%d |
DATE | USA | %m.%d.%Y |
TIME | EUR | %H.%i.%s |
TIME | INTERVAL | %H%i%s |
TIME | ISO | %H:%i:%s |
TIME | JIS | %H:%i:%s |
TIME | USA | %h:%i:%s %p |
DATETIME | EUR | %Y-%m-%d %H.%i.%s |
DATETIME | INTERVAL | %Y%m%d%H%i%s |
DATETIME | ISO | %Y-%m-%d %H:%i:%s |
DATETIME | JIS | %Y-%m-%d %H:%i:%s |
DATETIME | USA | %Y-%m-%d %H.%i.%s |
GET_FORMAT(DATE,'USA') 返回的显示格式字符串为 %m.%d.%Y。
提示:若v1或v2只有一个明确是NULL,则IFNULL() 函数的结果类型为非NULL表达式的结果类型。
CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2] [ELSE rn] END
该函数表示,如果expr值等于某个vi,则返回对应位置THEN后面的结果;如果与所有值都不相等,则返回ELSE后面的rn。
CASE WHEN v1 THEN r1 [WHEN v2 THEN r2] [ELSE rn] END
该函数表示,某个vi值为true时,返回对应位置THEN后面的结果,如果所有值都不为true,则返回ELSE后的rn。
提示:一个CASE表达式的默认返回值类型是任何返回值的相容集合类型,具体情况视其所在语境而定;用在字符串语境中,返回结果为字符串;用在数字语境中,返回结果为十进制值、实数值或整数值。
VERSION()
VERSION() 返回指示MySQL服务器版本的字符串。这个字符串使用utf8字符集。
CONNECTION_ID()
CONNECTION_ID() 返回MySQL服务器当前用户连接数,每个连接都有各自唯一的ID。
SHOW PROCESSLIST 和 SHOW FULL PROCESSLIST
PROCESSLIST命令的输出结果显示有哪些线程在运行,不仅可以查看当前所有的连接数,还可以查看当前的连接状态,帮助识别出有问题的查询语句等。
如果是root账号,就能看到所有用户的当前连接。如果是其他普通账号,则只能看到自己占用的连接。SHOW PROCESSLIST 只列出前100条,如果想全部列出可使用SHOW FULL PROCESSLIST。
返回结果中,各个列的含义和用途:
(1)Id列,用户登录MySQL时,系统分配的 “connection id”。
(2)User列,显示当前用户。如果不是root,这个命令就只显示用户权限范围内的SQL语句。
(3)Host列,显示这个语句是从哪个IP的哪个端口上发出的,可以用来追踪出现的问题语句的用户。
(4)db列,显示这个进程目前连接的是哪个数据库。
(5)Command列,显示当前连接的执行命令,一般取值为休眠(sleep)、查询(Query),连接(Connect)。
(6)Time列,显示这个状态持续的时间,单位是秒。
(7)State列,显示使用当前连接的SQL语句状态,很重要的列,State只是语句执行中的某一个状态。一个SQL语句,以查询为例,可能需要经过Copying to tmp table、Sorting result、Sending data等状态才能完成。
(8)Info列,显示这个SQL语句,是判断问题语句的一个重要依据。
DATABASE()和SCHEMA()
DATABASE( )和SCHEMA( ) 函数返回使用utf8字符集的默认(当前)数据库名。
CHARSET(str)
CHARSET(str) 返回字符串str自变量的字符集。
COLLATION(str)
COLLATION(str) 返回字符串str的字符排列方式。
INET_ATON()
INET_NTOA()
INET_NTOA(expr) 给定一个数字网络地址(4bit或8bit),返回作为字符串的该地址的点地址表示。
GET_LOCK(str,timeout)
GET_LOCK(str,timeout) 设法使用字符串str给定的名字得到一个锁,超时为timeout秒。若成功得到锁,则返回1;若操作超时,则返回0;若发生错误,则返回NULL。假如有一个用GET_LOCK() 得到的锁,当执行RELEASE_LOCK() 或连接断开(正常或非正常)时,这个锁就会解除。
RELEASE_LOCK(str)
RELEASE_LOCK(str) 解开被GET_LOCK() 获取的,用字符串str所命名的锁。若锁被解开,则返回1;若线程尚未创建锁,则返回0(此时锁没有被解开);若命名的锁不存在,则返回NULL。若该锁从未被GET_LOCK() 的调用获取,或锁已经被提前解开,则该锁不存在。
IS_FREE_LOCK(str)
IS_FREE_LOCK(str) 检查名为str的锁是否可以使用(换言之,没有被封锁)。若锁可以使用,则返回1(没有人在用这个锁);若这个锁正在被使用,则返回0;出现错误,则返回NULL(诸如不正确的参数)。
IS_USED_LOCK(str)
IS_USED_LOCK(str) 检查名为str的锁是否正在被使用(换言之,被封锁)。若被封锁,则返回使用该锁的客户端的连接标识符(connection ID);否则,返回NULL。
BENCHMARK(count,expr) 函数重复执行表达式(expr)count次。它可以用于计算MySQL处理表达式的速度。结果值通常为0(0只是表示处理过程很快,并不是没有花费时间)。另一个作用是它可以在MySQL客户端内部报告语句执行的时间。
提示:BENCHMARK报告的时间是客户端经过的时间,而不是在服务器端的CPU时间,每次执行后报告的时间并不一定是相同的。