MySQL中的函数从功能分,可以分为:数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数和加密函数等其他函数。
一般情况下,当有错误产生的时候,数学函数将会返回NULL。
1、绝对值函数ABS(X)和返回圆周率的函数PI()。
ABS(X)返回X的绝对值,PI()返回圆周率的值。
2、平方根函数SQRT(X)和求余函数MOD(X,Y)。
SQRT(X)返回非负数X的二次方根,如果X是负数就返回NULL。MOD(X,Y)返回X被Y除后的余数。
3、获取整数的函数CEIL(X),CEILING(X),FLOOR(X)。
CEIL(X)和CEILING(X)意义相同,返回不小于X的最小整数值,返回值转化成一个BIGINT。
FLOOR(X)返回一个不大于X的最大整数值,返回值转化成一个BIGINT。
4、获取随机数的函数RAND(),RAND(X)。
RAND()返回一个随机浮点数v,范围0<=v<=1。
RAND(X)返回一个随机浮点数v,范围0<=v<=1。但是X值相同的两个函数返回的随机数相同。
5、四舍五入函数ROUND(X)、ROUND(X,Y)和TRUNCATE(X,Y)。
ROUND(X)进行四舍五入保留整数。
ROUND(X,Y)返回一个最接近X的值,这个值保留到小数点后y位;如果Y为负数,就保留到小数点左边的相应位数,这些位直 接保存为0,不进行四舍五入。
TRUNCATE(X,Y)返回被舍去至小数点后Y位的数字X,不进行四舍五入,如果Y为负数,小数点左边到第Y位的书直接保存0。
6、符号函数SIGN(X)。
返回参数X的符号。X的值为正、零或负时分别返回1、0、-1。
7、幂运算函数POW(X,Y)、POWER(X,Y)、EXP(X)。
POW(X,Y)和POWER(X,Y)返回X的Y次乘方的结果值。
EXP(X)返回e的X乘方的结果值。
8、对数函数LOG(X)和LOG10(X)。
LOG(X)返回X的自然对数,X相对于基数e的对数。
LOG10(X)返回X的技术为10的对数。
9、角度和弧度相互转换的函数RADIANS(X)和DEGREES(X)。
RADIANS(X)将参数X由角度转化为弧度。
DEGREES(X)将参数X由弧度转化为角度。
10、正弦函数SIN(X)和反正弦函数ASIN(X)。
SIN(X)返回X的正弦,其中X为弧度值。
ASIN(X)返回X的反正弦,即正弦为X的值。如果X不在-1和1之间,就返回NULL。
11、余弦函数COS(X)和反余弦函数ACOS(X)。
COS(X)返回X的余弦,其中X的值为弧度值。
ACOS(X)返回X的反余弦,即余弦是X的值。如果X不在-1和1之间,就返回NULL。
12、正切函数TAN(X)、反正切函数ATAN(X)和余切函数COT(X)。
TAN(X)返回X的正切,其中X为弧度值。
ATAN(X)返回X的反正切,即正切为X的值。
COT(X)返回X的余切。
1、计算字符串字符数的函数和字符串长度的函数。
CHAR_LENGTH(str)返回值是字符串str所包含的字符个数。一个多字节字符算作一个单字符。
LENGTH(str)返回字符串的字节长度,一个汉字是3个字节,一个数字或字母算一个字节。
2、合并字符串函数CONCAT(s1,s2,...)、CONCAT_WS(x,s1,s2,...)
CONCAT(s1,s2,...)返回结果为连接参数产生的字符串,或许有一个或多个参数。
CONCAT_WS(x,s1,s2,...)也是连接字符串,但是第一个参数x是其他参数的分隔符。如CONCAT_WS('-','aaa','bbb')会返回 'aaa-bbb'。如果第一个参数x为NULL,就会返回NULL;如果后面的字符串为空,会忽略这个NULL值。
3、替换字符串的函数INSERT(s1,x,len,s2)
返回字符串s1,其子字符串起始于x位置和被字符串s2取代的len字符。如果x闯过字符串长度,返回原始字符串;如果len的长度大于其他字符串长度,就从位置x开始替换;如果任意一个参数为NULL,就返回NULL。
4、字母大小写转换函数
LOWER(str)或者LCASE(str)都可以将字符串str中的字母字符全部转换成小写字母。
UPPER(str)或者UCASE(str)都可以将字符串str中的字母字符全部转换成大写字母。
5、获取指定长度的字符串的函数LEFT(s,n)、RIGHT(s,n)
LEFT(s,n)返回字符串s开始的最左边n个字符。
RIGHT(s,n)返回字符串s开始的最右边n个字符。
6、填充字符串的函数LPAD(s1,len,s2)、RPAD(s1,len,s2)
LPAD(s1,len,s2)返回字符串s1,其左边由字符串s2填补到len字符长度。
RPAD(s1,len,s2)返回字符串s1,其右边由字符串s2填补到len字符长度。
7、删除空格的函数LTRIM(s)、RTRIM(s)、TRIM(s)。
LTRIM(s)返回字符串s1,字符串左侧空格字符被删除。
RTRIM(s)返回字符串s1,字符串右侧空格字符被删除。
TRIM(s)返回字符串s1,字符串两侧空格字符被删除。
8、删除指定字符串的函数TRIM(s1 FROM s)。
删除字符串两边所有子字符串s1,s1为可选项,在未指定的情况删除空格。
9、重复生成字符串的函数REPEAT(s,n)
返回一个由重复字符串s组成的字符串,n是重复次数。
10、空格函数SPACE(n)和替换函数REPLACE(s,s1,s2)
SPACE(n)返回一个由n个空格组成的字符串。
REPLACE(s,s1,s2)使用字符串s2替换字符串s中所有的字符串s1。
11、比较字符串大小的函数STRCMP(s1,s2)
STRCMP(s1,s2)如果所有的字符串都一样,返回0;s1小于s2,返回-1;s1大于s2,返回1。一个字符一个字符的比较。
12、获取子串的函数SUBSTRING(s,n,len)和MID(s,n,len)
两者作用相同。从字符串s返回一个长度为len的子字符串,起始于位置n。如果n为负值,起始位置就在字符串从右往左数的第 n个字符位置(就是倒数n个字符位置)。
13、匹配子串开始位置的函数
LOCATE(str1,str2)、POSITION(str1 IN str)和INSTR(str,str1)三个函数相同,返回子字符串str1在字符串str中的开始位置。
14、字符串逆序的函数REVERSE(s)
将字符串反转。
15、返回指定位置的字符串函数。
ELT(N,str1,str2,...strn),若N=1,就返回str1;若N=2,就返回str3;若N=n,就返回strn;若N小于1或大于参数的数目,返回NULL。
16、返回指定字符串位置的函数FIELD(s,s1,s2,...)
返回字符串s在列表s1,s2,...中第一次出现的位置,找不到s的情况下,返回0;s为NULL时,返回0。
17、返回子串位置的函数FIND_IN_SET(s1,s2)
返回字符串s1在字符串列表s2中出现的位置,字符串列表是由多个逗号分开的字符串组成的列表。若s1不在s2或s2为空字符串,返回0;如果任意一个参数为NULL,就返回NULL。这个函数在s1中包含一个逗号时无法正常运行。
18、选取字符串的函数MAKE_SET(x,s1,s2,...)
返回由x的二进制指定的相应位的字符串组成的字符串,s1对应比特1,s2对应比特01。
1、获取当前日期的函数和获取当前时间的函数。
CURDATE()和CURRENT_DATE()函数作用相同,返回当前日期格式为“YYYY-MM-DD”,当使用CURDATE()+0或者CURRENT_DATE()+0时,返回时间格式“YYYYMMDD”。
CURTIME()和CURRENT_TIME()函数作用相同,返回当前时间格式是“HH:MM:SS”,当使用CURTIME()+0或者CURRENT_TIME()+0时,返回时间格式“HHMMSS.000000”。
2、获取当前日期和时间的函数。
CURRENT_TIMESTAMP()、LOCALTIME()、NOW()和SYSDATE()这四个函数相同,获取日期时间格式是:“YYYY-MM-DD HH:MM:SS”或“YYYYMMDDHHMMSS”。
3、UNIX时间戳函数
UNIX_TIMESTAMP(data)如果无参数调用,就返回一个Unix时间戳(‘1970-01-01 00:00:00’GMT之后的秒数)作为无符号整数。如果用data调用UNIX_TIMESTAMP(data),就会将参数值以‘1970-01-01 00:00:00’GMT后的秒数形式返回。
FROM_UNIXTIME(data)函数将UNIX时间戳转化成普通格式的时间。
4、返回UTC日期的函数和返回UTC时间的函数
UTC_DATE()函数返回当前UTC(世界标准时间)日期值,格式是‘YYYY-MM-DD’或者‘YYYYMMDD’。使用UTC_DATE()+0返回的格式是:‘YYYYMMDD’。
UTC_TIME()返回当前UTC时间值,格式是‘HH:MM:SS’或者‘HHMMSS’。使用UTC_TIME()+0返回的格式是“HHMMSS.000000”。
5、获取月份的函数MONTH(date)和MONTHNAME(date)。
MONTH(date)函数返回date对应的月份,范围值是1~12。
MONTHNAME(date)函数返回日期date对应月份的英文全名。
6、获取星期的函数DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d)。
DAYNAME(d)返回d对应的工作日的英文名称,例如Sunday、Monday。
DAYOFWEEK(d)返回d对应的一周中的索引(位置)。1表示周日,2表示周一,......,7表示周六。
WEEKDAY(d)返回d对应的工作日索引。0表示周一,1表示周二,......,6表示周日。
7、获取星期数的函数WEEK(d)和WEEKOFYEAR(d)
WEEK(d)计算日期d是一年中的第几周。WEEK(d)的双参数形式允许指定该星期是否起始于周日或周一。范围是0~53或者1~53。
WEEKOFYEAR(d)计算某天位于一年中的第几周,范围是1~53.相当于WEEK(d,3)。
8、获取天数的函数DAYOFYEAR(d)和DAYOFMONTH(d)
DAYOFYEAR(d)返回d是一年中的第几天,范围是1~366。
DAYOFMONTH(d)返回d是一个月中的第几天,范围是1~31。
9、获取年份、季度、小时、分钟和秒钟的函数
YEAR(date)返回date的年份,范围是1970~2069。如果年份的位置只有两位数,那么‘00~69’转化成‘2000~2069’,‘70~99’转化成‘1970~1999’。
QUARTER(date)返回一年中的季度值。范围是1~4。
MINUTE(time)返回time中的分钟数,范围是0~59。
SECOND(time)返回time中的秒钟数,范围是0~59。
10、获取日期的指定值函数EXTRACT(type FROM date)。
EXTRACT(type FROM date)从日期中提取一部分,并不执行计算,比如EXTRACT(YEAR FROM “2011-07-02”)会返回2011。EXTRACT(YEAR_MONTH FROM “2011-07-02”)会返回201107,EXTRACT(DAY_MINUTE FROM “2011-07-02 01: 02 :03”)会返回020102。
11、时间和秒钟转换的函数
TIME_TO_SEC(time)将time转化为秒。
SEC_TO_TIME(seconds)将秒转化为HH:MM:SS。
12、计算日期和时间的函数
DATE_ADD(date,INTERVAL expr type)和ADDDATE(date,INTERVAL expr type)作用相同,执行日期加运算。date是一个时间值,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-dare2)。
类型(type值) | 含义 | expr表达式的形式 |
---|---|---|
YEAR | 年 | YY |
MONTH | 月 | MM |
DAY | 日 | DD |
HOUR | 时 | hh |
MINUTE | 分 | mm |
SECOND | 秒 | ss |
YEAR_MONTH | 年和月 | YY和MM之间用任意符号隔开 |
DAY_HOUR | 日和小时 | DD和hh之间用任意符号隔开 |
DAY_MINUTE | 日和分钟 | DD和mm之间用任意符号隔开 |
DAY_SECOND | 日和秒钟 | DD和ss之间用任意符号隔开 |
HOUR_MINUTE | 时和分 | hh和mm之间用任意符号隔开 |
HOUR_SECOND | 时和秒 | hh和ss之间用任意符号隔开 |
MINUTE_SECOND | 分和秒 | mm和ss之间用任意符号隔开 |
13、将日期和时间格式化的函数
DATE_FORMAT(date,format)根据format指定的格式显示date值。主要的format格式如下表:
格式 | 描述 |
---|---|
%a | 缩写星期名 |
%b | 缩写月名 |
%c | 月,数值 |
%D | 带有英文前缀的月中的天 |
%d | 月的天,数值(00-31) |
%e | 月的天,数值(0-31) |
%f | 微秒 |
%H | 小时 (00-23) |
%h | 小时 (01-12) |
%I | 小时 (01-12) |
%i | 分钟,数值(00-59) |
%j | 年的天 (001-366) |
%k | 小时 (0-23) |
%l | 小时 (1-12) |
%M | 月名 |
%m | 月,数值(00-12) |
%p | AM 或 PM |
%r | 时间,12-小时(hh:mm:ss AM 或 PM) |
%S | 秒(00-59) |
%s | 秒(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 | 年,4 位 |
%y | 年,2 位 |
GET_FORMAT(val_type,format_type)返回日期时间字符串的显示格式。
1、IF(expr,v1,v2)函数
IF(expr,v1,v2)如果表达式expr是true(expr<>0 and expr<>NULL),则IF()的返回值为v1;否则返回值为v2。IF()的返回值可以是数字值或者字符串。
2、IFNULL(v1,v2)函数
加入v1不为NULL,则返回v1;否则返回v2。返回值可以是数字或者字符串。
3、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后面的结果;如果所有值都不为true,就返回ELSE后面的rn。
1、获取MySQL版本号、连接数和数据库名的函数。
如图使用processlist命令查看正在运行的线程。
各个列的含义和用途:
ID列:用户登录MySQL时系统分配的“connection id”。
User列:显示当前用户,如果不是root用户这个命令只显示用户权限范围内的sql语句。
Host列:显示这个语句是从哪个IP的哪个端口上发出的可以用来追踪出现问题语句的用户。
db列:显示这个进程目前连接的是哪个数据库。
Command列:显示当前连接的执行的命令,一般取值为休眠(Sleep),查询(Query),连接(Connect)。
Time列:显示这个状态持续的时间单位是秒。
State列:显示使用当前连接的sql语句状态
Info列:显示这个查询语句是判断问题语句的一个重要依据。
2、获取用户名的函数
USER()、CURRENT_USER、CURRENT_USER()、SYSTEM_USER()和SESSION_USER()这几个函数返回当前被Mysql服务器验证的用户名和主机名的组合。
3、获取字符串的字符集和排序方式的函数。
CHARSET(str)返回字符串str变量的字符集。
COLLATION(str)返回字符串str的字符排列方式。
4、获取最后一个自动生成的ID值的函数。
LAST_INSERT_ID()自动返回最后一个INSERT或UPDATE为AUTO_INCREMENT列设置的第一个发生的值。即数据库最新被修改那一条数据的ID。如果同时插入几条数据,本函数会返回同时插入的那几条数据的第一条数据的ID(具体返回的数值建议尝试一下)。
1、加密函数PASSWORD(str)。
PASSWORD(str)从原明文密码str计算并返回加密后的密码字符串,当参数为NULL的时候返回NULL。
2、加密函数MD5(str)。
MD5(str)为字符串算出一个MD5 128比特检验和。该值以32位十六进制数字的二进制字符串形式返回,当参数为NULL的时候返回NULL。
3、加密函数ENCODE(str,pswd_str)。
ENCODE(str,pswd_str)使用pswd_str作为密码,加密str。结果是一个和str长度相同的二进制字符串。
4、解密函数DECODE(crypt_str,pswd_str)。
DECODE(crypt_str,pswd_str)使用pswd_str作为密码,解密加密字符串crypt_str。crypt_str是由ENCODE()返回的字符串。
1、格式化函数FORMAT(x,n)
FORMAT(x,n)将数字x格式化并以四舍五入的方式保留小数点后n位。
2、不同进制的数字进行转换的函数
CONV(N,from_base,to_base)函数进行不同进制数之间的转换。返回值为数值N的字符串表示。由from_base进制转化为to_base进制。如果任意一个参数为NULL,返回NULL。
3、IP地址与数字相互转换的函数
INET_ATON(expr)给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数。
INET_NTOA(expr)给出一个数字网络地址(4或8比特),返回作为字符串的该地址的点地址表示。
4、加锁函数和解锁函数
GET_LOCK(str,timeout)设法使用字符串str给定的名字得到一个锁,超时为timeout秒。若成功得到锁返回1;若操作超时返回0;若发生错误返回NULL。假如有一个用GET_LOCK()得到的锁,当执行RELEASE_LOCK()或断开连接时,这个锁就会解除。
RELEASE_LOCK(str)解开被GET_LOCK()获取的、用字符串str锁命名的锁。若锁解开返回1;若该线程尚未创建锁返回0;若命名锁不存在返回NULL。
IS_FREE_LOCK(str)检查名为str的锁是否可以使用。可以使用返回1;正在被使用返回0;出现错误返回NULL。
IS_USED_LOCK(str)检查名为str的锁是否正在被使用。
5、重复执行指定操作的函数。
BENCHMARK(count,expr)函数重复执行count次expr表达式。
6、改变数据类型的函数
CAST(x,AS TYPE)和CONVERT(x,type)函数将一个类型的值转换为另一个类型的值,可以转换的的type有:BINARY、CHAR(n)、DATE、TIME、DATETIME、DECIMAL、SIGNED、UNSIGNED。
7、改变字符集的函数
CONVERT(... USING ...)带有USING的CONVERT()函数被用来在不同的字符集之间转化数据。