# MySQL 常用函数
# MySQL 数字函数
- ABS(x) 返回 x 的绝对值
SELECT ABS(-1) -- 返回 1 |
BIN(x) 返回 x 的二进制编码
SELECT BIN(15); -- 1111
CEILING(x) 返回大于或等于 x 的最小整数
SELECT CEILING(1.5); -- 返回 2
EXP(x) 返回 e 的 x 次方
SELECT EXP(3) -- 20.085536923188
FLOOR(x) 返回小于或等于 x 的最大整数
SELECT FLOOR(1.5) -- 返回 1
MOD(x,y) 返回 x 除以 y 以后的余数
SELECT MOD(5,2) -- 1
POW(x,y) 返回 x 的 y 次方
SELECT POWER(2,3) -- 8
RAND() 返回 0 到 1 的随机数
SELECT RAND() --0.93099315644334
ROUND(x) 返回离 x 最近的整数
SELECT ROUND(1.23456) --1
round() &floor()
floor () 函数:取整,保留整数部分,舍弃小数部分。
round () 函数:四舍五入。round (x,d):x 是要处理的数,d 是保留的小数位数。round (x): 相当于 round (x,0)。
# 常用聚合函数
AVG(expression) 返回一个表达式的平均值,expression 是一个字段
SELECT AVG(Price) AS AveragePrice FROM Products; -- 返回 Products 表中 Price 字段的平均值:
COUNT(expression) 返回查询的记录总数,expression 参数是一个字段或者 * 号
SELECT COUNT(ProductID) AS NumberOfProducts FROM Products; -- 返回 Products 表中 products 字段总共有多少条记录:
MAX(expression) 返回字段 expression 中的最大值
SELECT MAX(Price) AS LargestPrice FROM Products; -- 返回数据表 Products 中字段 Price 的最大值:
MIN(expression) 返回字段 expression 中的最小值
SELECT MIN(Price) AS MinPrice FROM Products;
SUM(expression) 返回指定字段的总和
SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails;
# 字符串函数
ASCII(s) 返回字符串 s 的第一个字符的 ASCII 码。
SELECT ASCII(CustomerName) AS NumCodeOfFirstChar
FROM Customers;
CHAR_LENGTH(s) 返回字符串 s 的字符数
SELECT CHAR_LENGTH("RUNOOB") AS LengthOfString;
CONCAT(s1,s2...sn) 字符串 s1,s2 等多个字符串合并为一个字符串
SELECT CONCAT("SQL ", "Runoob ", "Gooogle ", "Facebook") AS ConcatenatedString;
POSITION(s1 IN s) 从字符串 s 中获取 s1 的开始位置
SELECT POSITION('b' in 'abc') -- 2
REPLACE(s,s1,s2) 将字符串 s2 替代字符串 s 中的字符串 s1
SELECT REPLACE('abc','a','x') --xbc
REVERSE(s) 将字符串 s 的顺序反过来
SELECT REVERSE('abc') -- cba
SUBSTR(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串
SELECT SUBSTR("RUNOOB", 2, 3) AS ExtractString; -- UNO
TRIM(s) 去掉字符串 s 开始和结尾处的空格
SELECT TRIM(' RUNOOB ') AS TrimmedString;
UPPER(s) 将字符串转换为大写
SELECT UPPER("runoob"); -- RUNOOB
UCASE (s) 同上将字符串转换为大写 , SELECT UCASE("runoob"); -- RUNOOB
# 日期和时间函数
CURDATE() 返回当前日期
SELECT CURDATE(); -> 2018-09-19
CURRENT_DATE() 返回当前日期
SELECT CURRENT_DATE();
-> 2018-09-19
CURRENT_TIME 返回当前时间
SELECT CURRENT_TIME();
-> 19:59:02
ps: CURTIME () 也是返回当前时间 SELECT CURTIME();-> 19:59:02
CURRENT_TIMESTAMP() 返回当前日期和时间
SELECT CURRENT_TIMESTAMP()
-> 2018-09-19 20:57:43
ps: NOW () 也是返回当前日期和时间 SELECT NOW()-> 2018-09-19 20:57:43
DATE() 从日期或日期时间表达式中提取日期值
SELECT DATE("2017-06-15");
-> 2017-06-15
DATEDIFF(d1,d2) 计算日期 d1->d2 之间相隔的天数
SELECT DATEDIFF('2001-01-01','2001-02-02')
-> -32
还有更多时间函数,见文档
# 时间查询
查询一天:
select * from table where to_days(column_time) = to_days(now());
select * from table where date(column_time) = curdate();
查询一周:
select * from table where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time);
查询一个月:
select * from table where DATE_SUB(CURDATE(), INTERVAL INTERVAL 1 MONTH) <= date(column_time);
-- 最近 30 天:
SELECT film_name as name, ticket_count as value FROM history where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(history_time)
查询一年:
SELECT DATE_FORMAT(history_time,'%Y') as years,COUNT(history_time) as sum
FROM history
GROUP BY years