赞
踩
函数表示对输入参数值返回一个具有特定关系的值,MySQL提供了大量丰富的函数,在进行数据库管理以及数据的查询和操作时将会经常用到各种函数。各类函数从功能方面主要分为数学函数,字符串函数、日期和时间函数、条件判断函数、系统信息函数和加密函数等其他函数。
绝对值函数、三角函数(正弦函数、余弦函数、正切函数、余切函数等)、对数函数、随机数函数等。
ABS(X)返回X的绝对值。
PI()返回圆周率π的值。默认显示小数位是6位。
SQRT(x)返回非负数x的二次方根。
MOD(x,y)返回x被y除后的余数,MOD()对于带有小数部分的数值也起作用,它返回除法运算后的精确余数。
CEIL(x)和CEILING(x)的意义相同,返回不小于x的最小整数值,返回值转化为一个BIGINT。
FLOOR(x)返回不大于x的最大整数值,返回值转化为一个BIGINT。
RAND(x) 返回一个随即浮点值v,范围在0到1之间(0 <= v <= 1.0)。若已指定一个整数参数x,则它被当作种子值,用来产生重复序列。
可以看到,不带参数的RAND()每次产生的随机数值是不同的。
可以看到,当RAND(x)的参数相同时,将产生相同的随机数,不同的x产生的随机数值不同。
ROUND(x)返回最接近于参数x的整数,对x值进行四舍五入。
可以看到,四舍五入处理之后,只保留了各个值的整数部分。
ROUND(x,y) 返回最接近于参数x的数,其值保留到小数点后面y位,若y为负值,则将保留x值到小数点左边y位。
TRUNCATE(x,y)返回被舍去至小数点后y位的数字x。若y的值为0,则结果不带小数点或不带小数部分。若y设为负数,则截去(归零)x小数点左起第y位开始后面所有低位的值。
注意: ROUND(x,y) 函数在截取值的时候四舍五入,而TRUNCATE(x,y)直接截取值,并不进行四舍五入。
SIGN(x)返回参数的符号,x的值位负、零或正时返回结果依次为-1、0或1。
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) 将参数x由角度转化为弧度。
DEGREES(x)将参数x由弧度转化为角度。
SIN(x)返回x正弦,其中x为弧度值。
ASIN(x)返回x的反正弦,即正弦为x的值。若x不在-1到1的范围之内,则返回NULL。
由结果可以看到,函数ASIN和SIN互为反函数;ASIN(3)中的参数3超出了正弦值的范围,因此返回NULL。
COS(x)返回x的余弦,其中x为弧度值。
ACOS(x) 返回x的反余弦,即余弦是x的值。若x不在-1~1的范围之间,则返回NULL。
由结果可以看到,函数COS和ACOS互为反函数。
TAN(x)返回x的正切,其中x为给定弧度值。
ATAN(x)返回x的反正切,即正切为x的值。
COT(x) 返回x的余切。
由结果可以看到,函数COT和TAN互为倒函数。
CHAR_LENGTH(str)返回值为字符串str所包含的字符个数。一个多字节字符算作一个单字符。
LENGTH(str)返回值为字符串的字节长度,使用utf8(UNICODE 的一种变长字符编码,又称万国码)编码字符集时,一个汉字时3字节,一个数字或字母算1字节。
CONCAT(s1,s2,…)返回结果为连接参数产生的字符串,或许有一个或多个参数。如有任何一个参数为NULL,则返回值为NULL。如果所有参数均为非二进制字符串,则结果为非二进制字符串。如果自变量中含有一二进制字符串,则结果为一个二进制字符串。
在CONCAT_WS(x,s1,s2,…)中,CONCAT_WS代表CONCAT WITH Separator,是CONCAT()的特殊形式。第一个参数x是其他参数的分隔符,分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其他参数。如果分隔符为NULL,则结果为NULL。函数会忽略任何分隔符参数后的NULL值。
INSERT(s1,x,len,s2)返回字符串s1,其子字符串起始于x位置和被字符串s2取代的len字符,如果x超过字符串长度,则返回值为原始字符串。假如len的长度大于其他字符串的长度,则位置x开始替换。若任何一个参数为NULL,则返回值为NULL。
LOWER(str)或者LCASE(str)可以将字符串str中的字母字符全部变成小写字母。
UPPER(str)或者UCASE(str)可以将字符串str中的字母字符全部转换成大写字母。
LEFT(s,n)返回字符串s开始的最左边n个字符。
RIGHT(s,n)返回字符串str最右边的n个字符。
LPAN(s1,len,s2)返回字符串s1,其左边由字符串s2填补到len字符长度。假如s1的长度大于len,则返回值被缩短至len字符。
RPAD(s1,len,s2)返回字符串s1,其右边被字符串s2填补至len字符长度。假设字符串s1的长度大于len,则返回值被缩短到len字符长度。
LTRIM(s)返回字符串s,字符串左侧空格字符被删除。
TRIM(s1 FROM s)删除字符串s中两端所有的字符串s1。s1为可选项,在未指定情况下,删除空格。
REPEAT(s,n)返回一个由重复的字符串s组成的字符串,字符串s的数目等于n。若n<=0,则返回一个空字符串。若s或n为NULL,则返回NULL。
SPACE(n)返回一个由n个空格组成的字符串。
REPLACE(s,s1,s2)使用字符串s2代替字符串s中所有的字符串s1.
STRCMP(s1,s2):若所有的字符串均相同,则返回0;若根据当前分类次序,第一个参数小于第二个,则返回-1;其他情况返回1.
SUBSTRING(s,n,len)带有len参数的格式,从字符串s返回一个长度与len字符相同的子符串,起始于位置n。也可能对n使用一个负值。假若这样,则子符串的起始位置起始于字符串结尾的n字符,即倒数第n个字符,而不是字符串的开头位置。
MID(s,n,len)与SUBSTRING(s,n,len)的作用相同。
LOCATE(str1,str)、POSITION(str1 IN str)和INSTR(str,str1)3个函数的作用相同,返回子字符串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,…,sn) 返回字符串s在列表s1,s2,…,sn中第一次出现的位置,在找不到s的情况下,返回值为0。如果s为NULL,则返回值为0,原因是NULL不能同任何值进行同等比较。
FIND_IN_SET(s1,s2)返回字符串s1在字符串列表s2中出现的位置,字符串列表是一个由多个逗号’,‘分开的字符串组成的列表。如果s1不是s2或s2为空字符串,则返回值为0。如果任意一个参数为NULL,则返回值为NULL。这个函数在第一个参数包含一个逗号’,‘时将无法正常运行。
MAKE_SET(x,s1,s2,…,sn)函数按x的二进制数从s1,s2,……,sn中选取字符串。例如5的二进制时0101,这个二进制从右往左的第一位和第三位是1,所以选取s1和s3。s1,s2,…,sn中的NULL值不会被添加到结果中。
CURDATE()和CURRENT_DATE()函数的作用相同,将当前日期按照‘YYYY-MM-DD’或者YYYYMMDD格式的值返回,具体格式根据函数在字符串或是数字语境中而定。
CURTIME()和CURRENT_TIME()函数的作用相同,将当前时间以‘HH:MM:SS'或HHMMSS的格式返回,具体格式根据函数在字符串或是数字语境中而定。
CURRENT_TIMESTAMP()、LOCALTIME()、NOW()和SYSDATE()4个函数的作用相同,均返回当前日期和时间值,格式为’YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS,具体格式根据函数在字符串或数字语境中而定。
UNIX_TIMESTAMP(date)若无参数调用,则返回一个UNIX时间戳(‘1970-01-01 00:00:00’GMT之后的秒数)作为无符号整数。其中,GMT(Green wich 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_DATE()函数返回当前UTC(世界标准时间)日期值,其格式为‘YYYY-MM-DD’或YYYYMMDD,具体格式取决于函数是否用在字符串或数字语境中。
UTC_TIME()返回当前UTC时间值,其格式为‘HH:MM:SS'或HHMMSS,具体格式取决于函数是否用在字符串或数字语境中。
MONTH(date)函数返回date对应的月份,范围值为1~12。
MONTHNAME(date)函数返回日期date对应月份的英文全名。
DAYNAME(d)函数返回d对应的工作日的英文名称,例如Sunday、Monday等。
DAYOFWEEK(d)函数返回d对应的一周中的索引(位置,1表示周日,2表示周一,…,7表示周六)
WEEKDAY(d)返回d对应的工作日索引:0表示周一,1表示周二,…,6表示周日。
WEEK(d)计算日期d是一年中的第几周。WEEK()的双参数形式允许指定该星期是否起始于周日或周一,以及返回值的范围是否为0~53或1~53.若Mode参数被省略,则使用default_week_format系统自变量的值,可参考表。
Mode | 一周的第一天 | 范围 | Week1为第一周 |
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)计算某天位于一年中的第几周,范围是1~53,相当于WEEK(d,3)。
DAYOFYEAR(d)函数返回d是一年中的第几天,范围是1~366。
DAYOFMONTH(d)函数返回d是一年中的第几天,范围是1~31。
YEAR(date)返回date对应的年份,范围是1970~2069。
注意:‘00~69’转换为‘2000~2069’,‘70~99’转换为‘1970~1999’ 。
QUARTER(date)返回date对应的一年中的季度值,范围是1~4。
MINUTE(time)返回time对应的分钟数,范围是0~59。
SECOND(time)返回time对应的秒数,范围是0~59。
EXTRACT(type FROM date)函数所使用的时间间隔类型说明符与DATE_ADD()或DATE_SUB()的相同,但它从日期中提取一部分,而不是执行日期运算。
TIME_TO_SEC(time)返回已转化为秒的time参数。转换公式为:小时*3600+分钟*600+秒。
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是一个表达式,用来指定从起始日期添加或减去的时间间隔值。对于负值的时间间隔,expr可以以一个负号’-‘开头,type为关键词,指示了表达式被解释的方式。
type值 | 预期的expr格式 |
MICROSECOND | MICROSECONDS |
SECOND | SECONDS |
MINUTE | MINUTES |
HOUR | HOURS |
DAY | DAYS |
WEEK | WEEKS |
MONTH | MONTHS |
QUARTER | QUARTERS |
YEAR | YEARS |
SECOND_MICROSECOND | 'SECOND.MICROSECONDS' |
MINUTE_MICROSECOND | 'MINUTE.MICROSECONDS' |
MINUTE_SECOND | 'MINUTE: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_ADD(date,INTERVAL expr type)和ADDDATE(date,INTERVAL expr type) 两个函数的作用相同,执行日期的加运算。
DATE_SUB(date,INTERVAL expr type) 或者 SUBDATE(date,INTERVAL expr type) 两个函数的作用相同,执行日期的减运算。
ADDTIME(date,expr)函数将expr值添加到date,并返回修改后的值,date是一个日期或者日期时间表达式,而expr是一个时间表达式。
SUBTIME(date,expr)函数将date减去expr值,并返回修改后的值。其中,date是一个日期或者日期时间表达式,而expr是一个时间表达式。
DATEDIFF(date1,date2)返回起始时间date1和结束时间date2之间的天数。date1和date2为日期或日期时间表达式。
DATE_FORMAT(date,format)根据format指定的格式显示date值。
说明符 | 说明 |
%a | 工作日的缩写名称(Sun……Sat) |
%b | 月份的缩写名称(Jan……Dec) |
%c | 月份,数字形式(0……12) |
%D | 以英文后缀表示月中的几号(1st,2nd……) |
%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(01……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 | 工作日名称(周日……周六) |
%w | 一周中的每日(0=周日……6=周六) |
%X | 该周的年份,其中周日为每周的第一天;数字形式,4位数;和%V同时使用 |
%x | 该周的年份,其中周日为每一的第一天;数字形式,4位数;和%V同时使用 |
%Y,%y | 4位数形式表示年份 2位数形式表示年份 |
%% | 标识符% |
TIME_FORMAT(time,format)根据表达式format的要求显示时间time。表达式format指定了显示的格式。因为TIME_FORMAT(time,format)只处理时间,所以format只使用时间格式。
GET_FORMAT(val_type,format_type)返回日期时间字符串的显示格式,val_type表示日期数据类型,包括DATE、DATETIME和TIME;format_type表示格式化显示类型。
值类型 | 格式化类型 | 显示格式字符串 |
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 |
IF(expr,v1,v2):如果表达式expr是TRUE(expr<>0 and expr<>NULL),则返回值为v1;否则返回值为v2。IF()的返回值为数字值或字符串值,具体情况视所在语境而定。
IFNULL(v1,v2):假如v1不为NULL,则IFNULL()的返回值为v1;否则其返回值为v2.IFNULL()的返回值是数字或者字符串,具体情况取决于其所在的语境。
CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2] …[ELSE rn+1] END: 如果expr值等于某个vn,则返回对应位置THEN后面的结果;如果与所有值都不相等,则返回ELSE后面的rn+1。
CASE WHEN v1 THEN r1[WHEN v2 THEN r2]…ELSE rn+1] END: 某个vn值为TRUE时,返回对应位置THEN后面的结果;如果所有值都不为TRUE,则返回ELSE后的rn+1。
提示:一个CASE表达式的默认返回值类型时任何返回值的相容集合类型,但具体情况视其所在语境而定。如果用在字符串语境中,则返回结果为字符串。如果用在数字语境中,则返回结果为十进制值、实数值或整数值。
MySQL中的系统信息右数据库版本号、当前用户名和连接数、系统字符集、最后一个自动生成的ID值等。
VERSION()返回指定MySQL服务器版本的字符串。这个字符串使用utf8字符集。
CONNECTION_ID()返回MySQL服务器当前连接的次数,每个连接都有各自唯一的ID。
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语句,是判断问题语句的一个重要依据。
使用另一个命令行登录MySQL
DATABASE()和SCHEMA() 函数返回使用utf8字符集的默认(当前)数据库名。
USER()、CURRENT_USER、CURRENT_USER()、SYSTEM_USER()和SESSION_USER()这几个函数返回当前被MySQL服务器验证的用户名和主机名组合。这个值符合确定当前登录用户存储权限的MySQL账户。一般情况下,返回值是相同的。
CHARSET(str) 返回字符串str自变量的字符集。
COLLATION(str)返回字符串str的字符排列方式。
LAST_INSERT_ID()函数返回最后生成的AUTO_INCREMENT值。
(1) 一次插入一条记录
(2)一次同时插入多条记录
当使用一条INSERT语句插入多行时,LAST_INSERT_ID()只返回插入的第一行数据时产生的值,在这里为第3条记录。之所以这样,是因为这使依靠其他服务器复制同样的INSERT语句变得简单。
注意:LAST_INSERT_ID是与数据表无关的,如果向表a插入数据后再向表b插入数据,那么LAST_INSERT_ID返回表b中的Id值。
加密函数主要用来对数据进行加密和界面处理。
MD5(str)为字符串算出一个MD5 128比较校验和。该值以32为十六进制数字的二进制字符串形式返回,若参数为NULL,则会返回NULL。
SHA(str)从原明文密码str计算并返回加密后的密码字符串,当参数为NULL时,返回NULL。SHA加密算法比MD5更加安全。
SHA2(str, hash_length) 使用hash_length作为长度,加密str。hash_length支持的值224、256、384、512和0。其中,0等同于256。
FORMAT(x,n)将数字x格式化,并以四舍五入的方式保留小数点后n位,结果以字符串的形式返回。若n为0,则返回结果函数不含小数部分。
CONV(N,from_base,to_base)函数进行不同进制数间的转换。返回值为数值N的字符串表示,有from_base 进制转化为 to_base进制。如有任意一个参数为NULL,则返回值为NULL。自变量N被理解为一个整数,但是可以被指定为一个整数或字符串。最小基数为2,最大基数为36。
INET_ATON(expr)给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数。地址可以是4或8bit地址。
INET_NTOA(expr)给定一个数字网络地址(4或8bit),返回作为字符串的该地址的点地址表示。
INET_NTOA和INET_ATON互为反函数。
GET_LOCK(str,timeout)设法使用字符串str给定的名字得到一个锁,超时为timeout秒。若成功得到锁,则返回1;若操作超时,则返回0;若发生错误,则返回NULL。假如有一个用GET_LOCK()得到的锁,当执行RELEASE_LOCK()或连接断开(正常或非正常)时,这个锁就会解除。
RELEASE_LOCK(str)解开被GET_LOCK()获取的、用字符串str所命名的锁。若锁被解开,则返回1;若该线程尚未创建锁,则返回0(此时锁没有被解开);若命名的锁不存在,则返回NULL。若该锁从未被GET_LOCK()的调用获取,或锁已经被提前解开了,则该锁不存在。
IS_FREE_LOCK(str)检查名为str的锁是否可以使用(换言之,没有被封锁)。若锁可以使用,则返回1(没有人在用这个锁);若这个锁正在被使用,则返回0;出现错误,则返回NULL(诸如不正确的参数)。
IS_USED_LOCK(str)检查名为str的锁是否正在被使用(换言之,被封锁)。若被封锁,则返回使用该锁的客户端的连接标识符(connection ID);否则,返回NULL。
GET_LOCK('lock',10)返回结果为1,说明成功得到了一个名称为‘lock1’的锁,持续时间为10秒。IS_USED_LOCK('lock1‘)返回结果为当前连接ID,表示名称为‘lock1’的锁正在被使用IS_FREE_LOCK('lock1') 返回结果为0,说明名称为’lock1‘的锁正在被使用。RELEASE_LOCK('lock1')返回值为1,说明解锁成功。
BENCHMAKE(count,expr)函数重复count次执行表达式expr。它可以用于计算MySQL处理表达式的速度。
CONVER(…USING…):带有USING的CONVERT()函数被用来在不同的字符集之间转化数据。
CAST(x, AS type)和 CONVERT(x, type) 函数将一个类型和值转换为另一个类型的值,可转换的type有BINARY、CHAR(n)、DATE、TIME、DATETIME、DECIMAL、SIGNED、UNSIGNED。
这里创建了名称为w1的窗口函数,规定对brcount字段进行排序,然后在SELECT子句中对窗口函数w1执行rank()方法,将结果输出为rank字段。
-- end
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。