常用的 SQL 内部函数
AVG()
mysql> SELECT * FROM tbl_1; +----+------+------+ | id | a | b | +----+------+------+ | 2 | 1 | a | | 4 | 2 | a | | 6 | 3 | b | | 8 | 4 | c | +----+------+------+ 4 rows in set (0.00 sec) mysql> SELECT AVG(a) FROM tbl_1; +--------+ | AVG(a) | +--------+ | 2.5000 | +--------+ 1 row in set (0.00 sec)
COUNT()
mysql> SELECT COUNT(*) FROM tbl_1 WHERE b = 'a'; +----------+ | COUNT(*) | +----------+ | 2 | +----------+ 1 row in set (0.00 sec)
MAX() 返回数据集里最大值
mysql> SELECT MAX(a) FROM tbl_1; +--------+ | MAX(a) | +--------+ | 4 | +--------+ 1 row in set (0.00 sec)
MIN() 返回数据集里最小值
mysql> SELECT MIN(a) FROM tbl_1; +--------+ | MIN(a) | +--------+ | 1 | +--------+ 1 row in set (0.00 sec)
SUM() 求和
mysql> SELECT SUM(a) FROM tbl_1; +--------+ | SUM(a) | +--------+ | 10 | +--------+ 1 row in set (0.00 sec)
ABS() OR ABSVAL() 计算绝对值
mysql> SELECT ABS(a) FROM tbl_1; +--------+ | ABS(a) | +--------+ | 1 | | 2 | | 3 | | 4 | +--------+ 4 rows in set (0.00 sec)
CEILING()
mysql> SELECT CEILING(1.1), CEILING(1.5), CEILING(-1.1), CEILING(-1.5); +--------------+--------------+---------------+---------------+ | CEILING(1.1) | CEILING(1.5) | CEILING(-1.1) | CEILING(-1.5) | +--------------+--------------+---------------+---------------+ | 2 | 2 | -1 | -1 | +--------------+--------------+---------------+---------------+ 1 row in set (0.00 sec)
ROUND() 四舍五入
mysql> SELECT ROUND(111.111, 1), ROUND(111.111, 2), ROUND(111.111, 3), ROUND(111.111, 4), ROUND(111.111, 5), ROUND(111.111, 0), ROUND(111.111, -1), ROUND(111.111, -2), ROUND(111.111, -3)\G *************************** 1. row *************************** ROUND(111.111, 1): 111.1 ROUND(111.111, 2): 111.11 ROUND(111.111, 3): 111.111 ROUND(111.111, 4): 111.1110 ROUND(111.111, 5): 111.11100 ROUND(111.111, 0): 111 ROUND(111.111, -1): 110 ROUND(111.111, -2): 100 ROUND(111.111, -3): 0 1 row in set (0.01 sec) mysql> SELECT ROUND(111.116, 1), ROUND(111.116, 2), ROUND(111.116, 3), ROUND(111.116, 4), ROUND(111.116, 5), ROUND(111.116, 6), ROUND(111.116, 0), ROUND(111.116, -1), ROUND(111.116, -2), ROUND(11.116, -3)\G *************************** 1. row *************************** ROUND(111.116, 1): 111.1 ROUND(111.116, 2): 111.12 ROUND(111.116, 3): 111.116 ROUND(111.116, 4): 111.1160 ROUND(111.116, 5): 111.11600 ROUND(111.116, 6): 111.116000 ROUND(111.116, 0): 111 ROUND(111.116, -1): 110 ROUND(111.116, -2): 100 ROUND(11.116, -3): 0 1 row in set (0.00 sec)
CURTIME() 返回系统时间
mysql> SELECT CURTIME(); +-----------+ | CURTIME() | +-----------+ | 13:40:30 | +-----------+ 1 row in set (0.00 sec)
CURDATE() 返回系统日期
mysql> SELECT CURDATE(); +------------+ | CURDATE() | +------------+ | 2009-08-03 | +------------+ 1 row in set (0.00 sec)
DATE()
mysql> SELECT DATE('2009-08-03');
+--------------------+
| DATE('2009-08-03') |
+--------------------+
| 2009-08-03 |
+--------------------+
1 row in set (0.00 sec)
DAY() 返回日期的日部分
mysql> SELECT * FROM tbl_2; +---------------------+---------------------+ | a | b | +---------------------+---------------------+ | 2009-08-03 00:00:00 | 2009-07-03 00:00:00 | | 2009-08-03 00:00:00 | 2009-07-01 00:00:00 | | 2009-08-08 00:00:00 | 2009-07-01 00:00:00 | | 2009-08-09 00:00:00 | 2009-07-10 00:00:00 | +---------------------+---------------------+ 4 rows in set (0.00 sec) mysql> SELECT DAY(a), DAY(b) FROM tbl_2; +--------+--------+ | DAY(a) | DAY(b) | +--------+--------+ | 3 | 3 | | 3 | 1 | | 8 | 1 | | 9 | 10 | +--------+--------+ 4 rows in set (0.00 sec)
DAYOFMONTH() 返回参数日部分
mysql> SELECT DAYOFMONTH(a) FROM tbl_2; +---------------+ | DAYOFMONTH(a) | +---------------+ | 3 | | 3 | | 8 | | 9 | +---------------+ 4 rows in set (0.00 sec)
DAYOFWEEK() 返回参数的星期值1~7,1-星期日;7-星期六
mysql> SELECT DAYOFWEEK(a) FROM tbl_2; +--------------+ | DAYOFWEEK(a) | +--------------+ | 2 | | 2 | | 7 | | 1 | +--------------+ 4 rows in set (0.00 sec)
DAYOFYEAR() 返回值1~366
mysql> SELECT DAYOFYEAR(a), DAYOFYEAR(b) FROM tbl_2; +--------------+--------------+ | DAYOFYEAR(a) | DAYOFYEAR(b) | +--------------+--------------+ | 215 | 184 | | 215 | 182 | | 220 | 182 | | 221 | 191 | +--------------+--------------+ 4 rows in set (0.00 sec)
HOUR() 返回参数小时部分,参数为时间或时间戳类型
mysql> SELECT * FROM tbl_2; +---------------------+---------------------+ | a | b | +---------------------+---------------------+ | 2009-08-03 00:00:00 | 2009-07-03 00:00:00 | | 2009-08-03 00:00:00 | 2009-07-01 00:00:00 | | 2009-08-08 00:00:00 | 2009-07-01 00:00:00 | | 2009-08-09 00:00:00 | 2009-07-10 00:00:00 | | 2009-08-03 01:11:11 | 2009-08-03 02:21:12 | +---------------------+---------------------+ 5 rows in set (0.00 sec) mysql> SELECT HOUR(a), HOUR(b) FROM tbl_2; +---------+---------+ | HOUR(a) | HOUR(b) | +---------+---------+ | 0 | 0 | | 0 | 0 | | 0 | 0 | | 0 | 0 | | 1 | 2 | +---------+---------+ 5 rows in set (0.00 sec)