一、数学函数
函数 | 描述 | 示列 |
---|---|---|
ABS(x) | 求x绝对值 | SELECTABS(-100); |
PI() | 返回圆周率兀 | SELECT PI(); |
SQRT(x) | 平方根函数 | SELECT SQRT(4); |
MOD(x, y) | 求余函数 | SELECT MOD(5, 2); |
CEIL(x) | 返回一个不小于x的最小整数 | SELECT CEIL(1.253); |
CEILING(x) | 返回一个不小于x的最小整数 | SELECT CEILING(1.253); |
FLOOR(x) | 返回不大于x的最大整数 | SELECT FLOOR(1.253); |
RAND() | 返回一个大于等于0小于等于1之间的一个随机数 | SELECT RAND(); |
RAND(x) | 同一个x每次产生相同的随机数 | SELECT RAND(1); |
ROUND(x) | 返回最接近参数x的整数 | SELECT ROUND(x); |
ROUND(x, y) | 返回最接近参数x的整数,其值保留到小数点后y位 | SELECT ROUND(2.663, 1); |
TRUNCATE(x,y) | 返回舍去至小数点后y位的数字x | SELECT TRUNCATE(19.99, -1); 结果为10 |
SIGN(x) | 返回x的正负号,整数位1,负数为0 | SELECT SIGN(-10); 结果为0 |
POW(x, y) | 返回x的y次方 | SELECT POW(2, 2); |
POWER(x, y) | 返回x的y次方 | SELECT POWER(2, 2); |
EXP(x) | 返回e的x次方 | SELECT EXP(3); |
LOG(x) | 返回x的自然对数,x相对于基数e的对数 | SELECT LOG(8); |
LOG10(x) | 返回x的基数为10的对数 | SELECT LOG10(10); |
RADIANS(x) | 将x由角对转化为弧度 | SELECT RADIANS(90); |
DEGREES(x) | 将参数由弧度转化为角度 | SELECT DEGREES(PI()/2); |
SIN(x) | 返回x的正弦,x为弧度 | SELECT SIN(1); |
ASIN(x) | 返回x的反正弦,x为弧度 | SELECT ASIN(2); |
COS(x) | 返回x的余弦,x为弧度 | SELECT COS(2); |
ACOS(x) | 返回x的反余弦,x为弧度 | SELECT ACOS(x); |
TAN(x) | 返回x的正切,x为弧度 | SELECT TAN(0.3); |
ATAN(x) | 返回x的反正切,x为弧度 | SELECT ATAN(1); |
COT(x) | 返回x的余切,x为弧度 | SELECT COT(0.3); |
二、字符串函数
函数 | 描述 | 示列 |
---|---|---|
CHAR_LENGTH(str) | 返回str的字符个数 | SELECT CHAR_LENGTH(‘abc’); 结果为: 3 |
CONCAT(s1, s2,…) | 拼接字符s1,s2… | SELECT CONCAT(‘a’,‘b’); 结果为: ab |
CONCAT_WS(x, s1, s2…) | 拼接字符s1,s2…,并以x为分割符 | SELECT CONCAT_WS(’*’, ‘a’, ‘b’); 结果为: a*b |
INSERT(s1, x, len, s2) | 从字符s1第x个字符,替换len个字符为s2 | SELECT INSERT(‘Quest’, 3, 10, ‘Wh’); 结果为: QuWh |
LOWER(str) | 把str转化为小写 | SELECT LOWER(‘ABC’); 结果为:abc |
LCASE(str) | 把str转化为小写 | SELECT LCASE(‘ABC’); 结果为:abc |
UPPER(str) | 把srt转化为大写 | SELECT UPPER(‘abc’); 结果为:ABC |
UCASE(str) | 把srt转化为大写 | SELECT UCASE(‘abc’); 结果为:ABC |
LEFT(s, n) | 返回字符串s最左边的n个字符 | SELECT LEFT(‘football’, 5); 结果为: footb |
RIGNT(s, n) | 返回字符串s最右边的n个字符 | SELECT RIGNT’football’, 4); 结果为: ball |
LPAD(s1, len, s2) | 返回字符串s1,其左边有字符s2填补到len字符长度 | SELECT LPAD(‘hello’, 7, ‘??’); 结果为:??hello ) |
RPAD(s1, len, s2) | 返回字符串s1,其右边有字符s2填补到len字符长度 | SELECT RPAD(‘hello’, 7, ‘??’); 结果为:hello?? ) |
LTRIM(s) | 删除字符串s最左边的空格 | SELECT LTRIM(’ abc’); 结果为:abc |
RTRIM(s) | 删除字符串s最右边的空格 | SELECT RTRIM('abc '); 结果为:abc |
TRIM(s) | 删除字符串s的左右的空格 | SELECT TRIM(’ abc '); 结果为:abc |
TRIM(s1 FROM s) | 删除字符s两边的s1 | SELECT TRIM(‘ab’ FROM ‘abhelloab’);结果为:hello |
REPEAT(s, n) | 返回n个字符s拼接的新字符串 | SELECT REPEAT(‘A’, 2);结果为:AA |
SPACE(n) | 返回由n个空格组成的字符串 | SELECT CONCAT(’(’, SPACE(2), ‘)’);结果为:( ) |
REPLACE(s, s1, s2) | 使用字符串s2替换字符串s中的字符串s1 | SELECT REPLACE(‘abc’, ‘a’, ‘x’);结果为:xbc |
STRCMP(s1, s2) | s1与s2相等返回0,s1>s2返回1, s1<s2返回-1 | SELECT STRCMP(‘txt’, ‘txt’);结果为:0 |
SUBSTRING(s,n,len) MID(s,n,len) | 从字符串s返回一个长度同len字符相同的子字符 串,起始于位置n | SELECT SUBSTRING(‘breakfast’,5);结果为:kfast |
LOCATE(strl.str) POSITION(strl IN str) INSTR(str, str 1) | 返回子字符串 strl在字符串str中的开始位置 | SELECT LOCATE(‘a’,‘fdxa’);结果为:4 |
REVERSE(s) | 将字符串s反转,返回的字符串的顺序和s字符串顺序相反 | SELECT REVERSE(‘abc’);结果为:cba |
ELT(n,s1, s2, s3…) | 返回第n个字符,若没有第n个字符则返回NULL | SELECT ELT(2, ‘x’, ‘a’, ‘b’);结果为:a |
FIELD(s, s1, s2, …) | 返回字符串s第一个出现的位置 | SELECT FIELD(‘a’, ‘b’, ‘c’, ‘a’);结果为:3 |
FIND_IN_SET(s1, s2) | 返回字符串s1在字符串s2中出现的位置 | SELECT FIND_IN_SET(‘a’, ‘sssas,x,hello,a’);结果为:4 |
MAKE_SET(x, s1, s2…) | 返回由x的二进制数指定的相应位的字符串组成的字符串,s1对应0,s2对应01 | SELECT MAKE_SET(1|4, ‘hello’, ‘nice’, ‘world’);结果为:hello, world |
三、日期函数
函数 | 描述 | 示列 |
---|---|---|
ADDDATE(d,n) | 计算起始日期 d 加上 n 天的日期 | SELECT ADDDATE(“2017-06-15”, INTERVAL 10 DAY); ->2017-06-25 |
ADDTIME(t,n) | 时间 t 加上 n 秒的时间 | SELECT ADDTIME(‘2011-11-11 11:11:11’, 5)->2011-11-11 11:11:16 (秒) |
CURDATE() | 返回当前日期 | SELECT CURDATE();-> 2018-09-19 |
CURRENT_DATE() | 返回当前日期 | SELECT CURRENT_DATE();-> 2018-09-19 |
CURRENT_TIME | 返回当前时间 | SELECT CURRENT_TIME();-> 19:59:02 |
CURRENT_TIMESTAMP() | 返回当前日期和时间 | SELECT CURRENT_TIMESTAMP()-> 2018-09-19 20:57:43 |
CURTIME() | 返回当前时间 | SELECT CURTIME();-> 19:59:02 |
DATE() | 从日期或日期时间表达式中提取日期值 | SELECT DATE(“2017-06-15”); -> 2017-06-15 |
DATEDIFF(d1,d2) | 计算日期 d1->d2 之间相隔的天数 | SELECT DATEDIFF(‘2001-01-01’,‘2001-02-02’)-> -32 |
DATE_ADD(d,INTERVAL expr type) | 计算起始日期 d 加上一个时间段后的日期 | SELECT ADDDATE(‘2011-11-11 11:11:11’,1)-> 2011-11-12 11:11:11 (默认是天) |
DATE_FORMAT(d,f) | 按表达式 f的要求显示日期 d | SELECT DATE_FORMAT(‘2011-11-11 11:11:11’,’%Y-%m-%d %r’)-> 2011-11-11 11:11:11 AM |
DATE_SUB(date,INTERVAL expr type) | 函数从日期减去指定的时间间隔。Orders 表中 OrderDate 字段减去 2 天: | SELECT OrderId,DATE_SUB(OrderDate,INTERVAL 2 DAY) AS OrderPayDate FROM Orders |
DAY(d) | 返回日期值 d 的日期部分 | SELECT DAY(“2017-06-15”);-> 15 |
DAYNAME(d) | 返回日期 d 是星期几,如 Monday,Tuesday | SELECT DAYNAME(‘2011-11-11 11:11:11’)->Friday |
DAYOFMONTH(d) | 计算日期 d 是本月的第几天 | SELECT DAYOFMONTH(‘2011-11-11 11:11:11’)->11 |
DAYOFWEEK(d) | 日期 d 今天是星期几,1 星期日,2 星期一,以此类推 | SELECT DAYOFWEEK(‘2011-11-11 11:11:11’)->6 |
DAYOFYEAR(d) | 计算日期 d 是本年的第几天 | SELECT DAYOFYEAR(‘2011-11-11 11:11:11’)->315 |
EXTRACT(type FROM d) | 从日期 d 中获取指定的值,type 指定返回的值 | SELECT EXTRACT(MINUTE FROM ‘2011-11-11 11:11:11’)-> 11 |
FROM_DAYS(n) | 计算从 0000 年 1 月 1 日开始 n 天后的日期 | SELECT FROM_DAYS(1111)-> 0003-01-16 |
HOUR(t) | 返回 t 中的小时值 | SELECT HOUR(‘1:2:3’)-> 1 |
LAST_DAY(d) | 返回给给定日期的那一月份的最后一天 | SELECT LAST_DAY(“2017-06-20”);-> 2017-06-30 |
LOCALTIME() | 返回当前日期和时间 | SELECT LOCALTIME()-> 2018-09-19 20:57:43 |
LOCALTIMESTAMP() | 返回当前日期和时间 | SELECT LOCALTIMESTAMP()-> 2018-09-19 20:57:43 |
MAKEDATE(year, day-of-year) | 基于给定参数年份 year 和所在年中的天数序号 day-of-year 返回一个日期 | SELECT MAKEDATE(2017, 3);-> 2017-01-03 |
MAKETIME(hour, minute, second) | 组合时间,参数分别为小时、分钟、秒 | SELECT MAKETIME(11, 35, 4);-> 11:35:04 |
MICROSECOND(date) | 返回日期参数所对应的微秒数 | SELECT MICROSECOND(“2017-06-20 09:34:00.000023”);-> 23 |
MINUTE(t) | 返回 t 中的分钟值 | SELECT MINUTE(‘1:2:3’)-> 2 |
MONTHNAME(d) | 返回日期当中的月份名称,如 Janyary | SELECT MONTHNAME(‘2011-11-11 11:11:11’)-> November |
MONTH(d) | 返回日期d中的月份值,1 到 12 | SELECT MONTH(‘2011-11-11 11:11:11’)->11 |
NOW() | 返回当前日期和时间 | SELECT NOW()-> 2018-09-19 20:57:43 |
PERIOD_ADD(period, number) | 为 年-月 组合日期添加一个时段 | SELECT PERIOD_ADD(201703, 5);-> 201708 |
PERIOD_DIFF(period1, period2) | 返回两个时段之间的月份差值 | SELECT PERIOD_DIFF(201710, 201703);-> 7 |
QUARTER(d) | 返回日期d是第几季节,返回 1 到 4 | SELECT QUARTER(‘2011-11-11 11:11:11’)-> 4 |
SECOND(t) | 返回 t 中的秒钟值 | SELECT SECOND(‘1:2:3’)-> 3 |
SEC_TO_TIME(s) | 将以秒为单位的时间 s 转换为时分秒的格式 | SELECT SEC_TO_TIME(4320)-> 01:12:00 |
STR_TO_DATE(string, format_mask) 将字符串转变为日期 | SELECT STR_TO_DATE(“August 10 2017”, “%M %d %Y”);-> 2017-08-10 | |
SUBDATE(d,n) | 日期 d 减去 n 天后的日期 | SELECT SUBDATE(‘2011-11-11 11:11:11’, 1)->2011-11-10 11:11:11 (默认是天) |
SUBTIME(t,n) | 时间 t 减去 n 秒的时间 | SELECT SUBTIME(‘2011-11-11 11:11:11’, 5)->2011-11-11 11:11:06 (秒) |
SYSDATE() | 返回当前日期和时间 | SELECT SYSDATE()-> 2018-09-19 20:57:43 |
TIME(expression) | 提取传入表达式的时间部分 | SELECT TIME(“19:30:10”);-> 19:30:10 |
TIME_FORMAT(t,f) | 按表达式 f 的要求显示时间 t | SELECT TIME_FORMAT(‘11:11:11’,’%r’) 11:11:11 AM |
TIME_TO_SEC(t) | 将时间 t 转换为秒 | SELECT TIME_TO_SEC(‘1:12:00’)-> 4320 |
TIMEDIFF(time1, time2) | 计算时间差值 | SELECT TIMEDIFF(“13:10:11”, “13:10:10”);-> 00:00:01 |
TIMESTAMP(expression, interval) | 单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和 | SELECT TIMESTAMP(“2017-07-23”, “13:10:11”);-> 2017-07-23 13:10:11 |
TO_DAYS(d) | 计算日期 d 距离 0000 年 1 月 1 日的天数 | SELECT TO_DAYS(‘0001-01-01 01:01:01’)-> 366 |
WEEK(d) | 计算日期 d 是本年的第几个星期,范围是 0 到 53 | SELECT WEEK(‘2011-11-11 11:11:11’)-> 45 |
WEEKDAY(d) | 日期 d 是星期几,0 表示星期一,1 表示星期二 | SELECT WEEKDAY(“2017-06-15”);-> 3 |
WEEKOFYEAR(d) | 计算日期 d 是本年的第几个星期,范围是 0 到 53 | SELECT WEEKOFYEAR(‘2011-11-11 11:11:11’)-> 45 |
YEAR(d) | 返回年份 | SELECT YEAR(“2017-06-15”);-> 2017 |
YEARWEEK(date, mode) | 返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推 | SELECT YEARWEEK(“2017-06-15”);-> 201724 |
四、加密函数
函数 | 描述 | 示列 |
---|---|---|
PASSWORD(str) | 加密字符串str,没有对应的解密函数 | SELECT PASSWORD(‘XSCW’); |
MD5(str) | 为字符串算出一个MD5 128比特校验和 | SELECT MD5(‘abc’)结果为:900150983cd24fb0d6963f7d28e17f72 |
ENCODE(str,pswd_str) | 使用pswd_str作为密码,加密str。使用DECODE()解密结果 ,结果是一 个和str长度相同的二进制字符串。 | SELECT ENCODE(‘secret’, ‘cry’) |
DECODE(str,pswd_str) | 解密 ENCODE函数加密的值 | SELECT DECODE(ENCODE(‘secret’, ‘cry’), ‘cry’); |
五、其他函数
函数 | 描述 | 示列 |
---|---|---|
FORMAT(x.n) | 将数字x格式化,并以四舍五入的方式保留小数点后n位,结果以字符串的形式返回。若n为0,则返回结果函数不含小数部分。 | SELECT FORMAT(12.652, 2); |
CONV(N,from_base,to_base) | 返回值为数值N的字符串表示, from_base进制转化为to_base进制 | SELECT CONV(8, 8, 10); |
INET_ATON(expr) | 把字符ip地址转化为整数,地址可以是4或8比特地址 | SELECT INET_ATON(‘127.0.0.1’); |
INET_NTOA(expr) | 把整数ip地址转化为字符串 | SELECT INET_NTOA(2130706433); |
BENCHMARK(count,expr) | 重复count次执行表达式expr | SELECT BENCHMARK(5, PASSWORD(‘xxx’)) |
CONVERT(s1 USING s2) | 把s1转化为s2字符集 | SELECT CONVERT(‘string’ USING latin1); |
CHARSET(str) | 查看str的字符集 | SELECT CHARSET(‘string’); |
CAST(x AS type) CONVERT(x, type) | 把x转化为type类型的值 | SELECT CAST(100 AS CHAR(2)); |