mysql 均值减法_mysql常用函数

数学函数

函数名称

作 用

ABS

求绝对值

SQRT

求二次方根

MOD

求余数

CEIL 和 CEILING

两个函数功能相同,都是返回不小于参数的最小整数,即向上取整

FLOOR

向下取整,返回值转化为一个BIGINT

RAND

生成一个0~1之间的随机数,传入整数参数时,用来产生重复序列

ROUND

对所传参数进行四舍五入

SIGN

返回参数的符号

POW 和 POWER

两个函数的功能相同,都是所传参数的次方的结果值

SIN

求正弦值

ASIN

求反正弦值,与函数 SIN 互为反函数

COS

求余弦值

ACOS

求反余弦值,与函数 COS 互为反函数

TAN

求正切值

ATAN

求反正切值,与函数 TAN 互为反函数

COT

求余切值

ABS

ABS(x) 返回 x 的绝对值。正数的绝对值是其本身,负数的绝对值为其相反数,0的绝对值是0。

mysql> SELECT ABS(5),ABS(-2.4),ABS(-24),ABS(0);

+--------+-----------+----------+--------+

| ABS(5) | ABS(-2.4) | ABS(-24) | ABS(0) |

+--------+-----------+----------+--------+

| 5 | 2.4 | 24 | 0 |

+--------+-----------+----------+--------+

1 row in set (0.10 sec)

SQRT

SQRT(x) 返回非负数 x 的二次方根。负数没有平方根,返回结果为 NULL。

mysql> SELECT SQRT(25),SQRT(120),SQRT(-9);

+----------+--------------------+----------+

| SQRT(25) | SQRT(120) | SQRT(-9) |

+----------+--------------------+----------+

| 5 | 10.954451150103322 | NULL |

+----------+--------------------+----------+

1 row in set (0.06 sec)

MOD

MOD(x,y) 返回 x 被 y 除后的余数,MOD() 对于带有小数部分的数值也起作用,它返回除法运算后的余数。

mysql> SELECT MOD(63,8),MOD(120,10),MOD(15.5,3);

+-----------+-------------+-------------+

| MOD(63,8) | MOD(120,10) | MOD(15.5,3) |

+-----------+-------------+-------------+

| 7 | 0 | 0.5 |

+-----------+-------------+-------------+

1 row in set (0.03 sec)

CEIL/CEILING

CEIL(x) 和 CEILING(x) 的意义相同,返回不小于 x 的最小整数值,返回值转化为一个 BIGINT。

mysql> SELECT CEIL(-2.5),CEILING(2.5);

+------------+--------------+

| CEIL(-2.5) | CEILING(2.5) |

+------------+--------------+

| -2 | 3 |

+------------+--------------+

1 row in set (0.00 sec)

FLOOR

FLOOR(x) 函数返回小于 x 的最大整数值。

mysql> SELECT FLOOR(5),FLOOR(5.66),FLOOR(-4),FLOOR(-4.66);

+----------+-------------+-----------+--------------+

| FLOOR(5) | FLOOR(5.66) | FLOOR(-4) | FLOOR(-4.66) |

+----------+-------------+-----------+--------------+

| 5 | 5 | -4 | -5 |

+----------+-------------+-----------+--------------+

1 row in set (0.00 sec)

RAND

RAND() 函数被调用时,可以产生一个在 0 和 1 之间的随机数。

mysql> SELECT RAND(), RAND(), RAND();

+------------------+-----------------+------------------+

| RAND() | RAND() | RAND() |

+------------------+-----------------+------------------+

| 0.45464584925645 | 0.1824410643265 | 0.54826780459682 |

+------------------+-----------------+------------------+

1 row in set (0.00 sec)

当使用整数作为参数调用时,,RAND() 将产生一个可重复的系列数字。

mysql> SELECT RAND(1),RAND(),RAND(1);

+---------------------+--------------------+---------------------+

| RAND(1) | RAND() | RAND(1) |

+---------------------+--------------------+---------------------+

| 0.40540353712197724 | 0.7901452330780637 | 0.40540353712197724 |

+---------------------+--------------------+---------------------+

1 row in set (0.00 sec)

ROUND

ROUND(x) 函数返回最接近于参数x的整数;ROUND(x,y) 函数对参数x进行四舍五入的操作,返回值保留小数点后面指定的y位。

mysql> SELECT ROUND(-6.6),ROUND(-8.44),ROUND(3.44);

+-------------+--------------+-------------+

| ROUND(-6.6) | ROUND(-8.44) | ROUND(3.44) |

+-------------+--------------+-------------+

| -7 | -8 | 3 |

+-------------+--------------+-------------+

1 row in set (0.00 sec)

mysql> SELECT ROUND(-6.66,1),ROUND(3.33,3),ROUND(88.66,-1),ROUND(88.46,-2);

+----------------+---------------+-----------------+-----------------+

| ROUND(-6.66,1) | ROUND(3.33,3) | ROUND(88.66,-1) | ROUND(88.46,-2) |

+----------------+---------------+-----------------+-----------------+

| -6.7 | 3.330 | 90 | 100 |

+----------------+---------------+-----------------+-----------------+

1 row in set (0.00 sec)

SIGN

SIGN(x) 返回参数的符号,x 的值为负、零和正时返回结果依次为 -1、0 和 1。

mysql> SELECT SIGN(-6),SIGN(0),SIGN(34);

+----------+---------+----------+

| SIGN(-6) | SIGN(0) | SIGN(34) |

+----------+---------+----------+

| -1 | 0 | 1 |

+----------+---------+----------+

1 row in set (0.00 sec)

POW/POWER

POW(x,y) 函数和 POWER(x,y) 函数用于计算 x 的 y 次方。

mysql> SELECT POW(5,-2),POW(10,3),POW(100,0),POWER(4,3),POWER(6,-3);

+-----------+-----------+------------+------------+----------------------+

| POW(5,-2) | POW(10,3) | POW(100,0) | POWER(4,3) | POWER(6,-3) |

+-----------+-----------+------------+------------+----------------------+

| 0.04 | 1000 | 1 | 64 | 0.004629629629629629 |

+-----------+-----------+------------+------------+----------------------+

1 row in set (0.00 sec)

SIN

SIN(x) 返回 x 的正弦值,其中 x 为弧度值

mysql> SELECT SIN(1),SIN(0.5*PI());

+--------------------+---------------+

| SIN(1) | SIN(0.5*PI()) |

+--------------------+---------------+

| 0.8414709848078965 | 1 |

+--------------------+---------------+

1 row in set (0.15 sec)

ASIN

ASIN(x) 返回 x 的反正弦值,若 x 不在 -1 到 1 的范围之内,则返回 NULL。

mysql> SELECT ASIN(0.8414709848078965),ASIN(2);

+--------------------------+---------+

| ASIN(0.8414709848078965) | ASIN(2) |

+--------------------------+---------+

| 1 | NULL |

+--------------------------+---------+

1 row in set (0.03 sec)

COS

COS(x) 返回 x 的余弦值,x 为弧度值。

mysql> SELECT COS(1),COS(0),COS(PI());

+--------------------+--------+-----------+

| COS(1) | COS(0) | COS(PI()) |

+--------------------+--------+-----------+

| 0.5403023058681398 | 1 | -1 |

+--------------------+--------+-----------+

1 row in set (0.03 sec)

ACOS

ACOS(x) x 值的范围必须在 -1 和 1 之间,否则返回 NULL。

mysql> SELECT ACOS(2),ACOS(1),ACOS(-1);

+---------+---------+-------------------+

| ACOS(2) | ACOS(1) | ACOS(-1) |

+---------+---------+-------------------+

| NULL | 0 | 3.141592653589793 |

+---------+---------+-------------------+

1 row in set (0.01 sec)

TAN

TAN(x) 返回 x 的正切值,x 为给定的弧度值。

mysql> SELECT TAN(1),TAN(0);

+--------------------+--------+

| TAN(1) | TAN(0) |

+--------------------+--------+

| 1.5574077246549023 | 0 |

+--------------------+--------+

1 row in set (0.03 sec)

ATAN

ATAN(x) 返回 x 的反正切值,正切为 x 的值。

mysql> SELECT ATAN(1.5574077246549023),ATAN(0);

+--------------------------+---------+

| ATAN(1.5574077246549023) | ATAN(0) |

+--------------------------+---------+

| 1 | 0 |

+--------------------------+---------+

1 row in set (0.05 sec)

COT

COT(x) 返回 x 的余切值,x 是给定的弧度值。

mysql> SELECT COT(1);

+--------------------+

| COT(1) |

+--------------------+

| 0.6420926159343306 |

+--------------------+

1 row in set (0.00 sec)

字符串函数

函数名称

作 用

LENGTH

计算字符串长度函数,返回字符串的字节长度

CONCAT

合并字符串函数,返回结果为连接参数产生的字符串,参数可以使一个或多个

INSERT

替换字符串函数

LOWER

将字符串中的字母转换为小写

UPPER

将字符串中的字母转换为大写

LEFT

从左侧字截取符串,返回字符串左边的若干个字符

RIGHT

从右侧字截取符串,返回字符串右边的若干个字符

TRIM

删除字符串左右两侧的空格

REPLACE

字符串替换函数,返回替换后的新字符串

SUBSTRING

截取字符串,返回从指定位置开始的指定长度的字符换

REVERSE

字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串

LENGTH

LENGTH(str) 函数的返回值为字符串的字节长度,使用 uft8(UNICODE 的一种变长字符编码,又称万国码)编码字符集时,一个汉字是 3 个字节,一个数字或字母是一个字节。

mysql> SELECT LENGTH('name'),LENGTH('数据库');

+----------------+---------------------+

|LENGTH('name') | LENGTH('数据库') |

+----------------+---------------------+

| 4 | 9 |

+----------------+---------------------+

1 row in set (0.04 sec)

CONCAT

CONCAT(sl,s2,...) 函数返回结果为连接参数产生的字符串,或许有一个或多个参数。

若有任何一个参数为 NULL,则返回值为 NULL。

若所有参数均为非二进制字符串,则结果为非二进制字符串。

若自变量中含有任一二进制字符串,则结果为一个二进制字符串。

mysql> SELECT CONCAT('MySQL','5.7'),CONCAT('MySQL',NULL);

+-----------------------+----------------------+

| CONCAT('MySQL','5.7') | CONCAT('MySQL',NULL) |

+-----------------------+----------------------+

| MySQL5.7 | NULL |

+-----------------------+----------------------+

1 row in set (0.03 sec)

INSERT

INSERT(s1,x,len,s2) 返回字符串 s1,子字符串起始于 x 位置,并且用 len 个字符长的字符串代替 s2。

若 x 超过字符串长度,则返回值为原始字符串。假如 len 的长度大于其他字符串的长度,则从位置 x 开始替换。若任何一个参数为 NULL,则返回值为 NULL。

mysql> SELECT INSERT('Football',2,4,'Play') AS col1,

-> INSERT('Football',-1,4,'Play') AS col2,

-> INSERT('Football',3,20,'Play') AS col3;

+----------+----------+--------+

| col1 | col2 | col3 |

+----------+----------+--------+

| FPlayall | Football | FoPlay |

+----------+----------+--------+

1 row in set (0.04 sec)

LOWER

LOWER(str) 可以将字符串 str 中的字母字符全部转换成小写。

mysql> SELECT LOWER('BLUE'),LOWER('Blue');

+---------------+---------------+

| LOWER('BLUE') | LOWER('Blue') |

+---------------+---------------+

| blue | blue |

+---------------+---------------+

1 row in set (0.03 sec)

UPPER

UPPER(str) 可以将字符串 str 中的字母字符全部转换成大写。

mysql> SELECT UPPER('green'),UPPER('Green');

+----------------+----------------+

| UPPER('green') | UPPER('Green') |

+----------------+----------------+

| GREEN | GREEN |

+----------------+----------------+

1 row in set (0.03 sec)

LEFT

LEFT(s,n) 函数返回字符串 s 最左边的 n 个字符。

mysql> SELECT LEFT('MySQL',2);

+-----------------+

| LEFT('MySQL',2) |

+-----------------+

| My |

+-----------------+

1 row in set (0.04 sec)

RIGHT

RIGHT(s,n) 函数返回字符串 s 最右边的 n 个字符。

mysql> SELECT RIGHT('MySQL',3);

+------------------+

| RIGHT('MySQL',3) |

+------------------+

| SQL |

+------------------+

1 row in set (0.00 sec)

TRIM

TRIM(s) 删除字符串 s 两侧的空格。

mysql> SELECT '[ mobile ]',CONCAT('[',TRIM(' mobile '),']');

+----------------+--------------------------------------+

| [ mobile ] | CONCAT('[',TRIM(' mobile '),']') |

+----------------+--------------------------------------+

| [ mobile ] | [mobile] |

+----------------+--------------------------------------+

1 row in set (0.07 sec)

REPLACE

REPLACE(s,s1,s2) 使用字符串 s2 替换字符串 s 中所有的字符串 s1。

mysql> SELECT REPLACE('aaa.mysql.com','a','w');

+----------------------------------+

| REPLACE('aaa.mysql.com','a','w') |

+----------------------------------+

| www.mysql.com |

+----------------------------------+

1 row in set (0.00 sec)

SUBSTRING

SUBSTRING(s,n,len) 带有 len 参数的格式,从字符串 s 返回一个长度同 len 字符相同的子字符串,起始于位置 n。也可能对 n 使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的第 n 个字符,即倒数第 n 个字符,而不是字符串的开头位置。

mysql> SELECT SUBSTRING('computer',3) AS col1,

-> SUBSTRING('computer',3,4) AS col2,

-> SUBSTRING('computer',-3) AS col3,

-> SUBSTRING('computer',-5,3) AS col4;

+--------+------+------+------+

| col1 | col2 | col3 | col4 |

+--------+------+------+------+

| mputer | mput | ter | put |

+--------+------+------+------+

1 row in set (0.00 sec)

REVERSE

REVERSE(s) 可以将字符串 s 反转,返回的字符串的顺序和 s 字符串的顺序相反。

mysql> SELECT REVERSE('hello');

+------------------+

| REVERSE('hello') |

+------------------+

| olleh |

+------------------+

1 row in set (0.00 sec)

日期时间函数

函数名称

作 用

CURDATE 和 CURRENT_DATE

两个函数作用相同,返回当前系统的日期值

CURTIME 和 CURRENT_TIME

两个函数作用相同,返回当前系统的时间值

NOW 和 SYSDATE

两个函数作用相同,返回当前系统的日期和时间值

UNIX_TIMESTAMP

获取UNIX时间戳函数,返回一个以 UNIX 时间戳为基础的无符号整数

FROM_UNIXTIME

将 UNIX 时间戳转换为时间格式,与UNIX_TIMESTAMP互为反函数

MONTH

获取指定日期中的月份

MONTHNAME

获取指定日期中的月份英文名称

DAYNAME

获取指定曰期对应的星期几的英文名称

DAYOFWEEK

获取指定日期对应的一周的索引位置值

WEEK

获取指定日期是一年中的第几周,返回值的范围是否为 0〜52 或 1〜53

DAYOFYEAR

获取指定曰期是一年中的第几天,返回值范围是1~366

DAYOFMONTH

获取指定日期是一个月中是第几天,返回值范围是1~31

YEAR

获取年份,返回值范围是 1970〜2069

TIME_TO_SEC

将时间参数转换为秒数

SEC_TO_TIME

将秒数转换为时间,与TIME_TO_SEC 互为反函数

DATE_ADD 和 ADDDATE

两个函数功能相同,都是向日期添加指定的时间间隔

DATE_SUB 和 SUBDATE

两个函数功能相同,都是向日期减去指定的时间间隔

ADDTIME

时间加法运算,在原始时间上添加指定的时间

SUBTIME

时间减法运算,在原始时间上减去指定的时间

DATEDIFF

获取两个日期之间间隔,返回参数 1 减去参数 2 的值

DATE_FORMAT

格式化指定的日期,根据参数返回指定格式的值

WEEKDAY

获取指定日期在一周内的对应的工作日索引

CURDATE/CURRENT_DATE

CURDATE() 和 CURRENT_DATE() 函数的作用相同,将当前日期按照“YYYY-MM-DD”或“YYYYMMDD”格式的值返回,具体格式根据函数用在字符串或数字语境中而定。

mysql> SELECT CURDATE(),CURRENT_DATE(),CURRENT_DATE()+0;

+------------+----------------+------------------+

| CURDATE() | CURRENT_DATE() | CURRENT_DATE()+0 |

+------------+----------------+------------------+

| 2017-04-01 | 2017-04-01 | 20170401 |

+------------+----------------+------------------+

1 row in set (0.03 sec)

CURTIME/CURRENT_TIME

CURTIME() 和 CURRENT_TIME() 函数的作用相同,将当前时间以“HH:MM:SS”或“HHMMSS”格式返回,具体格式根据函数用在字符串或数字语境中而定。

mysql> SELECT CURTIME(),CURRENT_TIME(),CURRENT_TIME()+0;

+-----------+----------------+------------------+

| CURTIME() | CURRENT_TIME() | CURRENT_TIME()+0 |

+-----------+----------------+------------------+

| 19:39:51 | 19:39:51 | 193951 |

+-----------+----------------+------------------+

1 row in set (0.04 sec)

NOW/SYSDATE

NOW() 和 SYSDATE() 函数的作用相同,都是返回当前日期和时间值,格式为“YYYY-MM-DD HH:MM:SS”或“YYYYMMDDHHMMSS”,具体格式根据函数用在字符串或数字语境中而定。

mysql> SELECT NOW(),SYSDATE();

+---------------------+---------------------+

| NOW() | SYSDATE() |

+---------------------+---------------------+

| 2017-04-01 19:36:52 | 2017-04-01 19:36:52 |

+---------------------+---------------------+

1 row in set (0.04 sec)

UNIX_TIMESTAMP

UNIX_TIMESTAMP(date) 若无参数调用,返回一个无符号整数类型的 UNIX 时间戳('1970-01-01 00:00:00'GMT之后的秒数)。若用 date 来调用 UNIX_TIMESTAMP(),它会将参数值以'1970-01-01 00:00:00'GMT后的秒数的形式返回。

mysql> SELECT UNIX_TIMESTAMP(),UNIX_TIMESTAMP(NOW()),NOW();

+------------------+-----------------------+---------------------+

| UNIX_TIMESTAMP() | UNIX_TIMESTAMP(NOW()) | NOW() |

+------------------+-----------------------+---------------------+

| 1551251270 | 1551251270 | 2019-02-27 15:07:50 |

+------------------+-----------------------+---------------------+

1 row in set (0.00 sec)

FROM_UNIXTIME

FROM_UNIXTIME(date) 函数把 UNIX 时间戳转换为普通格式的日期时间值,与 UNIX_TIMESTAMP () 函数互为反函数。

mysql> SELECT FROM_UNIXTIME(1150051270);

+---------------------------+

| FROM_UNIXTIME(1150051270) |

+---------------------------+

| 2006-06-12 02:41:10 |

+---------------------------+

1 row in set (0.00 sec)

MONTH

MONTH(date) 函数返回指定 date 对应的月份,范围为 1~12。

mysql> SELECT MONTH('2017-12-15');

+---------------------+

| MONTH('2017-12-15') |

+---------------------+

| 12 |

+---------------------+

1 row in set (0.00 sec)

MONTHNAME

MONTHNAME(date) 函数返回日期 date 对应月份的英文全名。

mysql> SELECT MONTHNAME('2017-12-15');

+-------------------------+

| MONTHNAME('2017-12-15') |

+-------------------------+

| December |

+-------------------------+

1 row in set (0.00 sec)

DAYNAME

DAYNAME(date) 函数返回 date 对应的工作日英文名称,例如 Sunday、Monday 等。

mysql> SELECT DAYNAME('2006-06-12');

+-----------------------+

| DAYNAME('2006-06-12') |

+-----------------------+

| Monday |

+-----------------------+

1 row in set (0.00 sec)

DAYOFWEEK

DAYOFWEEK(d) 函数返回 d 对应的一周中的索引(位置)。1 表示周日,2 表示周一,……,7 表示周六。这些索引值对应于ODBC标准。

mysql> SELECT DAYOFWEEK('2017-12-15');

+-------------------------+

| DAYOFWEEK('2017-12-15') |

+-------------------------+

| 6 |

+-------------------------+

1 row in set (0.04 sec)

WEEK

WEEK() 函数计算日期 date 是一年中的第几周。WEEK(date,mode) 函数允许指定星期是否起始于周日或周一,以及返回值的范围是否为 0~52 或 1~53。

WEEK函数接受两个参数:

- date是要获取周数的日期。

- mode是一个可选参数,用于确定周数计算的逻辑。

mysql> SELECT WEEK('2018-10-25',1);

+----------------------+

| WEEK('2018-10-25',1) |

+----------------------+

| 43 |

+----------------------+

1 row in set (0.00 sec)

DAYOFYEAR

DAYOFYEAR(d) 函数返回 d 是一年中的第几天,范围为 1~366。

mysql> SELECT DAYOFYEAR('2017-12-15');

+-------------------------+

| DAYOFYEAR('2017-12-15') |

+-------------------------+

| 349 |

+-------------------------+

1 row in set (0.00 sec)

DAYOFMONTH

DAYOFMONTH(d) 函数返回 d 是一个月中的第几天,范围为 1~31。

mysql> SELECT DAYOFMONTH('2017-12-15');

+--------------------------+

| DAYOFMONTH('2017-12-15') |

+--------------------------+

| 15 |

+--------------------------+

1 row in set (0.02 sec)

YEAR

YEAR() 函数可以从指定日期值中来获取年份值。

mysql> SELECT YEAR(NOW());

+-------------+

| YEAR(NOW()) |

+-------------+

| 2019 |

+-------------+

1 row in set (0.00 sec)

TIME_TO_SEC

TIME_TO_SEC(time) 函数返回将参数 time 转换为秒数的时间值,转换公式为“小时 ×3600+ 分钟 ×60+ 秒”

mysql> SELECT TIME_TO_SEC('15:15:15');

+-------------------------+

| TIME_TO_SEC('15:15:15') |

+-------------------------+

| 54915 |

+-------------------------+

1 row in set (0.00 sec)

SEC_TO_TIME

SEC_TO_TIME(seconds) 函数返回将参数 seconds 转换为小时、分钟和秒数的时间值。

mysql> SELECT SEC_TO_TIME('54925');

+----------------------+

| SEC_TO_TIME('54925') |

+----------------------+

| 15:15:25 |

+----------------------+

1 row in set (0.00 sec)

DATE_ADD/ADDDATE

DATE_ADD(date,INTERVAL expr type) 和 ADDDATE(date,INTERVAL expr type) 两个函数的作用相同,都是用于执行日期的加运算。

DATE_ADD() 和 ADDDATE() 函数有两个参数:

- date 是 DATE 或 DATETIME 的起始值。

- INTERVAL expr type是要添加到起始日期值的间隔值。

mysql> SELECT DATE_ADD('2018-10-31 23:59:59',INTERVAL 1 SECOND) AS C1,

-> DATE_ADD('2018-10-31 23:59:59',INTERVAL '1:1' MINUTE_SECOND) AS C2,

-> ADDDATE('2018-10-31 23:59:59',INTERVAL 1 SECOND) AS C3;

+---------------------+---------------------+---------------------+

| C1 | C2 | C3 |

+---------------------+---------------------+---------------------+

| 2018-11-01 00:00:00 | 2018-11-01 00:01:00 | 2018-11-01 00:00:00 |

+---------------------+---------------------+---------------------+

1 row in set (0.00 sec)

mysql> SELECT ADDDATE('2017-11-30 23:59:59', INTERVAL 1 SECOND) AS col1,

-> ADDDATE('2017-11-30 23:59:59' ,INTERVAL '1:1' MINUTE_SECOND) AS col2;

+---------------------+---------------------+

| col1 | col2 |

+---------------------+---------------------+

| 2017-12-01 00:00:00 | 2017-12-01 00:01:00 |

+---------------------+---------------------+

1 row in set (0.02 sec)

DATE_SUB/SUBDATE

DATE_SUB(date,INTERVAL expr type) 和 SUBDATE(date,INTERVAL expr type) 两个函数作用相同,都是执行日期的减法运算。

DATE_SUB() 和 SUBDATE() 函数接受两个参数:

- date 是 DATE 或 DATETIME 的起始值。

- expr 是一个字符串,用于确定从起始日期减去的间隔值。type 是 expr 可解析的间隔单位,例如DAY,HOUR等

mysql> SELECT DATE_SUB('2018-01-02',INTERVAL 31 DAY) AS C1,

-> SUBDATE('2018-01-02',INTERVAL 31 DAY) AS C2,

-> DATE_SUB('2018-01-01 00:01:00',INTERVAL '0 0:1:1' DAY_SECOND) AS C3;

+------------+------------+---------------------+

| C1 | C2 | C3 |

+------------+------------+---------------------+

| 2017-12-02 | 2017-12-02 | 2017-12-31 23:59:59 |

+------------+------------+---------------------+

1 row in set (0.00 sec)

ADDTIME

ADDTIME(time,expr) 函数用于执行时间的加法运算。添加 expr 到 time 并返回结果。

time 是一个时间或日期时间表达式

expr 是一个时间表达式

mysql> SELECT ADDTIME('2018-10-31 23:59:59','0:1:1'),

-> ADDTIME('10:30:59','5:10:37');

+----------------------------------------+-------------------------------+

| ADDTIME('2018-10-31 23:59:59','0:1:1') | ADDTIME('10:30:59','5:10:37') |

+----------------------------------------+-------------------------------+

| 2018-11-01 00:01:00 | 15:41:36 |

+----------------------------------------+-------------------------------+

1 row in set (0.00 sec)

SUBTIME

SUBTIME(time,expr) 函数用于执行时间的减法运算。函数返回 time。expr 表示的值和格式 time 相同。

time 是一个时间或日期时间表达式

expr 是一个时间

mysql> SELECT SUBTIME('2018-10-31 23:59:59','0:1:1'),SUBTIME('10:30:59','5:12:37');

+----------------------------------------+-------------------------------+

| SUBTIME('2018-10-31 23:59:59','0:1:1') | SUBTIME('10:30:59','5:12:37') |

+----------------------------------------+-------------------------------+

| 2018-10-31 23:58:58 | 05:18:22 |

+----------------------------------------+-------------------------------+

1 row in set (0.00 sec)

DATEDIFF

DATEDIFF(date1,date2) 返回起始时间 date1 和结束时间 date2 之间的天数。date1 和 date2 为日期或 date-and-time 表达式。计算时只用到这些值的日期部分。

mysql> SELECT DATEDIFF('2017-11-30','2017-11-29') AS COL1,

-> DATEDIFF('2017-11-30','2017-12-15') AS col2;

+------+------+

| COL1 | col2 |

+------+------+

| 1 | -15 |

+------+------+

1 row in set (0.00 sec)

DATE_FORMAT

DATE_FORMAT(date,format) 函数是根据 format 指定的格式显示 date 值。

DATE_FORMAT() 函数接受两个参数:

- date:是要格式化的有效日期值

- format:是由预定义的说明符组成的格式字符串,每个说明符前面都有一个百分比字符(%)。

说明符 说明

%a工作日的缩写名称(Sun~Sat)

%b月份的缩写名称(Jan…Dec)

%c月份,数字形式(0~12)

%D带有英语后缀的该月日期(0th, 2st, 3nd,…)

%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星期标识(周日、周一、周二…周六)

%w—周中的每日(0= 周日…6= 周六)

%X该周的年份,其中周日为每周的第一天,数字形式,4 位数,和%V同时使用

%x该周的年份,其中周一为每周的第一天,数字形式,4位数,和%v同时使用

%Y4 位数形式表示年份

%y2 位数形式表示年份

%%%一个文字字符

mysql> SELECT DATE_FORMAT('2017-11-15 21:45:00','%W %M %D %Y') AS col1,

-> DATE_FORMAT('2017-11-15 21:45:00','%h:i% %p %M %D %Y') AS col2;

+------------------------------+----------------------------+

| col1 | col2 |

+------------------------------+----------------------------+

| Wednesday November 15th 2017 | 09:i PM November 15th 2017 |

+------------------------------+----------------------------+

1 row in set (0.03 sec)

WEEKDAY

WEEKDAY(d) 返回 d 对应的工作日索引。0 表示周一,1 表示周二,……,6 表示周日。

mysql> SELECT WEEKDAY('2017-12-15');

+-----------------------+

| WEEKDAY('2017-12-15') |

+-----------------------+

| 4 |

+-----------------------+

1 row in set (0.00 sec)

聚合函数

函数名称

作用

MAX

查询指定列的最大值

MIN

查询指定列的最小值

COUNT

统计查询结果的行数

SUM

求和,返回指定列的总和

AVG

求平均值,返回指定列数据的平均值

MAX

MAX() 函数是用来返回指定列中的最大值。

+--------------+---------------+

| tb_students_score |

+--------------+---------------+

| student_name | student_score |

+--------------+---------------+

| Dany | 90 |

| Green | 99 |

| Henry | 95 |

| Jane | 98 |

| Jim | 88 |

| John | 94 |

| Lily | 100 |

| Susan | 96 |

| Thomas | 93 |

| Tom | 89 |

+--------------+---------------+

-- 数值类型

mysql> SELECT MAX(student_score)

-> AS max_score

-> FROM tb_students_score;

+-----------+

| max_score |

+-----------+

| 100 |

+-----------+

1 row in set (0.06 sec)

-- 字符类型

mysql> SELECT MAX(student_name)

-> AS max_name

-> FROM tb_students_score;

+----------+

| max_name |

+----------+

| Tom |

+----------+

1 row in set (0.03 sec)

MIN

MIN() 函数是用来返回查询列中的最小值。

-- 数值类型

mysql> SELECT MIN(student_score)

-> AS min_score

-> FROM tb_students_score;

+-----------+

| min_score |

+-----------+

| 88 |

+-----------+

1 row in set (0.00 sec)

-- 字符类型

mysql> SELECT MIN(student_name)

-> AS min_name

-> FROM tb_students_score;

+----------+

| min_name |

+----------+

| Dany |

+----------+

1 row in set (0.03 sec)

COUNT

COUNT() 函数统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数,使用方法有以下两种:

- COUNT(*) 计算表中总的行数,无论某列有数值或者为空值。

- COUNT(字段名)计算指定列下总的行数,计算时将忽略空值的行。

mysql> SELECT COUNT(student_name)

-> AS students_number

-> FROM tb_students_score;

+-----------------+

| students_number |

+-----------------+

| 10 |

+-----------------+

1 row in set (0.03 sec)

SUM

SUM() 是一个求总和的函数,返回指定列值的总和。

SUM() 函数在计算时,忽略列值为 NULL 的行。

mysql> SELECT SUM(student_score)

-> AS score_sum

-> FROM tb_students_score;

+-----------+

| score_sum |

+-----------+

| 942 |

+-----------+

1 row in set (0.00 sec)

AVG

AVG() 函数通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。

使用 AVG() 函数时,参数为要计算的列名称,若要得到多个列的平均值,则需要在每一列都使用 AVG() 函数。

mysql> SELECT AVG(student_score)

-> AS score_avg

-> FROM tb_students_score;

+-----------+

| score_avg |

+-----------+

| 94.2000 |

+-----------+

1 row in set (0.03 sec)

流程控制函数

函数名称

作用

IF

判断,流程控制

IFNULL

判断是否为空

CASE

搜索语句

IF

IF(expr,v1,v2) 允许您根据表达式的某个条件或值结果来执行一组 SQL 语句。

表达式 expr 得到不同的结果,当 expr 为真是返回 v1 的值,否则返回 v2.

mysql> SELECT IF(1<2,1,0) c1,IF(1>5,'√','×') c2,IF(STRCMP('abc','ab'),'yes','no') c3;

+----+----+-----+

| c1 | c2 | c3 |

+----+----+-----+

| 1 | × | yes |

+----+----+-----+

1 row in set, 2 warnings (0.00 sec)

IFNULL

IFNULL(v1,v2) 接受两个参数,如果不是NULL,则返回第一个参数,否则返回第二个参数.两个参数可以是文字值或表达式

mysql> SELECT IFNULL(5,8),IFNULL(NULL,'OK'),IFNULL(SQRT(-8),'FALSE'),SQRT(-8);

+-------------+-------------------+--------------------------+----------+

| IFNULL(5,8) | IFNULL(NULL,'OK') | IFNULL(SQRT(-8),'FALSE') | SQRT(-8) |

+-------------+-------------------+--------------------------+----------+

| 5 | OK | FALSE | NULL |

+-------------+-------------------+--------------------------+----------+

1 row in set (0.00 sec)

CASE

CASE 语句有两种形式:简单的和可搜索 CASE 语句。

简单的 CASE 语句就是指使用简单 CASE 语句来检查表达式的值与一组唯一值的匹配

简单的 CASE 语句的语法:

CASE

WHEN THEN

WHEN THEN

...

ELSE

END CASE;

mysql> SELECT CASE WEEKDAY(NOW()) WHEN 0 THEN '星期一' WHEN 1 THEN '星期二' WHEN

2 THEN '星期三' WHEN 3 THEN '星期四' WHEN 4 THEN '星期五' WHEN 5 THEN '星期六'

ELSE '星期天' END AS COLUMN1,NOW(),WEEKDAY(NOW()),DAYNAME(NOW());

+---------+---------------------+----------------+----------------+

| COLUMN1 | NOW() | WEEKDAY(NOW()) | DAYNAME(NOW()) |

+---------+---------------------+----------------+----------------+

| 星期四 | 2019-02-28 13:45:43 | 3 | Thursday |

+---------+---------------------+----------------+----------------+

1 row in set, 7 warnings (0.00 sec)

可搜索 CASE 语句等同于 IF 语句,但是它的构造更加可读。

可搜索CASE语句的语法:

CASE

WHEN THEN

WHEN THEN

...

ELSE commands

END CASE;

mysql> SELECT CASE WHEN WEEKDAY(NOW())=0 THEN '星期一' WHEN WEEKDAY(NOW())=1 THE

N '星期二' WHEN WEEKDAY(NOW())=2 THEN '星期三' WHEN WEEKDAY(NOW())=3 THEN '星期

四' WHEN WEEKDAY(NOW())=4 THEN '星期五' WHEN WEEKDAY(NOW())=5 THEN '星期六' WHEN

WEEKDAY(NOW())=6 THEN '星期天' END AS COLUMN1,NOW(),WEEKDAY(NOW()),DAYNAME(NOW(

));

+---------+---------------------+----------------+----------------+

| COLUMN1 | NOW() | WEEKDAY(NOW()) | DAYNAME(NOW()) |

+---------+---------------------+----------------+----------------+

| 星期四 | 2019-02-28 14:08:00 | 3 | Thursday |

+---------+---------------------+----------------+----------------+

1 row in set, 7 warnings (0.00 sec)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值