MySQL函数(下)

MySQL函数(上):MySQL函数(上)-CSDN博客,其中包括
一、字符串函数
二、数字函数

三、日期函数

日期函数可分为获取日期、计算日期、日期格式三大类

- 获取日期

1.CURDATE() / CURRENT_DATE()
描述:返回当前日期
实例:求当前日期
SELECT CURDATE(); / SELECT CURDATE();
输出:2023-12-06

2.CURRENT_TIME() / CURTIME()
描述:返回当前时间
实例:求当前时间
SELECT CURRENT_TIME(); / SELECT CURTIME();
输出:16:43:23

3.CURRENT_TIMESTAMP() / LOCALTIME() / LOCALTIMESTAMP() / NOW() / SYSDATE()
描述:返回当前日期和时间
实例:
SELECT CURRENT_TIMESTAMP(); / SELECT LOCALTIME(); / SELECT LOCALTIMESTAMP(); / SELECT NOW(); / SELECT SYSDATE();
输出:2023-12-06 16:44:20

4.LAST_DAY(d)
描述:返回给定日期的那一月份的最后一天
实例:
SELECT LAST_DAY("2023,12,06 16:46:30");
输出:2023-12-31

5.DATE()
描述:提取长日期的日期部分
实例:
SELECT DATE('2023-12-06 17:28:06');
输出:2023-12-06

6.TIME()
描述:提取长日期的时间部分
实例:
SELECT TIME('2023-12-06 17:28:06');
输出:17:28:06

7.YEAR(d)
描述:返回年份
实例:
SELECT YEAR('2023-12-06 17:28:06');
输出:2023

8.WEEKDAY(d)
描述:日期 d 是星期几,0 表示星期一,1 表示星期二
实例:
SELECT WEEKDAY('2023-12-06 17:28:06');
输出:2

9.MONTH(d) / DAY(d) / HOUR(t) / MINUTE(t) / SECOND(t)
描述:返回日期 d 中的月份值 / 返回日期 d 的天 / 返回 t 中的小时值 / 返回 t 中的分钟值 / 返回 t 中的秒钟值
实例:
SELECT DAY("2023,12,06 16:46:30");  
输出:6
SELECT HOUR("2023,12,06 16:46:30");
输出:16

10.EXTRACT(type FROM d)
描述:从日期 d 中获取指定的值.
type 值可以是:
MICROSECOND(微秒);SECOND;MINUTE;HOUR;DAY;WEEK;MONTH;QUARTER;YEAR;SECOND_MICROSECOND;MINUTE_MICROSECOND;MINUTE_SECOND;HOUR_MICROSECOND;HOUR_SECOND;HOUR_MINUTE;DAY_MICROSECOND;DAY_SECOND;DAY_MINUTE;DAY_HOUR;YEAR_MONTH
实例:
select EXTRACT(YEAR FROM '2023,12,06 16:46:30');
输出:2023

11.DAYNAME(d) / MONTHNAME(d)
描述:返回日期 d 是星期几 / 返回日期当中的月份名称 / 
实例:
SELECT DAYNAME('2023,12,06 16:46:30');
输出:Wednesday
SELECT MONTHNAME('2023,12,06 16:46:30');
输出:December

12.MAKEDATE(year, day-of-year) 
描述:基于给定参数年份 year 和所在年中的天数 day-of-year 返回一个日期
实例:
SELECT MAKEDATE(2023,6);
输出:2023-02-09

- 计算日期

13.MAKETIME(hour, minute, second)
描述:组合时间,参数分别为小时、分钟、秒
实例:
SELECT MAKETIME(17, 35, 4);
输出:17:35:04

14.ADDDATE(d,n)
描述:计算起始日期 d 加上 n 天的日期
实例:计算日期 2017-06-15 加上 10 天的日期
SELECT ADDDATE("2017-06-15", INTERVAL 10 DAY);
输出:2017-06-25

15.ADDTIME(t,n)
描述:计算起始时间 t 加上时间 n 后的时间
实例1:返回时间 2023-12-6 19:00:01 加上 5 秒后的时间
SELECT ADDTIME('2023-12-6 19:00:01', '5');
输出:2023-12-06 19:00:06
实例2:返回时间 2023-12-6 19:00:01 加上 2:30:10 后的时间
SELECT ADDTIME('2023-12-6 19:00:01','2:30:10');
输出:2023-12-06 21:30:11

16.DATE_ADD(d,INTERVAL expr type) / DATE_SUB(date,INTERVAL expr type)
描述:计算日期 d 加上指定的时间后的日期. / 计算日期 d 减去指定的时间后的日期.
type 值可以是:
MICROSECOND(微秒);SECOND;MINUTE;HOUR;DAY;WEEK;MONTH;QUARTER;YEAR;SECOND_MICROSECOND;MINUTE_MICROSECOND;MINUTE_SECOND;HOUR_MICROSECOND;HOUR_SECOND;HOUR_MINUTE;DAY_MICROSECOND;DAY_SECOND;DAY_MINUTE;DAY_HOUR;YEAR_MONTH
实例1:加
SELECT DATE_ADD("2023-12-06", INTERVAL '2' WEEK);
输出:2023-12-20
实例2:加
SELECT DATE_ADD("2023-12-06", INTERVAL '2:30' HOUR_MINUTE);
输出:2023-12-06 02:30:00
实例3:减
SELECT DATE_SUB("2023-12-06", INTERVAL '2:30' HOUR_MINUTE);
输出:2023-12-05 21:30:00

17.PERIOD_ADD(period, number)
描述:为 年-月 组合日期添加一个时段
实例:
SELECT PERIOD_ADD(202302,4);
输出:202306

18.DATEDIFF(d1,d2)
描述:计算日期 d1->d2 之间相隔的天数
实例1:
SELECT DATEDIFF('2023-12-01','2023-12-06');
输出:-5
实例2:
SELECT DATEDIFF('2023-12-06','2023-12-02');
输出:4

19.PERIOD_DIFF(period1, period2)
描述:返回两个时段之间的月份差值
实例:
SELECT PERIOD_DIFF(202310, 202306);
输出:4

20.TIMEDIFF(time1, time2)
描述:计算时间差值
实例:SELECT TIMEDIFF('2023-12-06 17:28:06','2023-12-06 18:48:15');
输出:-01:20:09

21.TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
描述:计算时间差,返回 datetime_expr2 − datetime_expr1 的时间差,unit 可选填MINUTE;HOUR;DAY;MONTH;YEAR
实例:
SELECT TIMESTAMPDIFF(HOUR,'2023-12-06 17:28:06','2023-12-08 18:48:15');
输出:49

22.WEEK(d) / WEEKOFYEAR(d)
描述:计算日期 d 是本年的第几个星期,范围是 0 到 53
实例:
SELECT WEEK('2023-12-06 17:28:06'); / SELECT WEEKOFYEAR('2023-12-06 17:28:06');
输出:49

23.DAYOFWEEK(d)
描述:日期 d 今天是星期几,1 星期日,2 星期一,以此类推
实例:
SELECT DAYOFWEEK('2023,12,06 16:46:30')
输出:4

24.DAYOFMONTH(d)
描述:计算日期 d 是本月的第几天
实例:
SELECT DAYOFMONTH('2023,12,06 16:46:30');
输出:6

25.DAYOFYEAR(d)
描述:计算日期 d 是本年的第几天
实例:
SELECT DAYOFYEAR('2023,12,06 16:46:30');
输出:340

26.SUBDATE(d,n)
描述:日期 d 减去 n 天后的日期
实例:
SELECT SUBDATE('2023-12-06 17:28:06', 1);
输出:2023-12-05 17:28:06

27.SUBTIME(t,n)
描述:时间 t 减去 n 秒的时间
实例:
SELECT SUBTIME('2023-12-06 17:28:06', 5);
输出:2023-12-06 17:28:01

28.QUARTER(d)
描述:返回日期d是第几季节,返回 1 到 4
实例:
SELECT QUARTER('2023-12-06 17:28:06');
输出:4

29.TIME_TO_SEC(t)
描述:将时间 t 转换为秒
实例:SELECT TIME_TO_SEC('01:28:06');
输出:5286

- 日期格式

30.DATE_FORMAT(d,f)
描述:按表达式 f 的要求显示日期 d
实例:
SELECT DATE_FORMAT('2023,12,06 16:46:30','%Y-%m-%d %r');
输出:2023-12-06 04:46:30 PM

31.TIME_FORMAT(t,f)
描述:按表达式 f 的要求显示时间 t
实例:SELECT TIME_FORMAT('2023-12-06 17:28:06','%r');
输出:05:28:06 PM

32.STR_TO_DATE(string, format_mask)
描述:将字符串转变为日期
实例:
SELECT STR_TO_DATE("August 6 2023", "%M %d %Y");
输出:2023-08-06

四、高级函数

分别(null)判断、转换、管理员三大类

- 判断

x.COALESCE(expr1, expr2, ...., expr_n)
描述:返回参数中的第一个非空表达式(从左向右)
实例:
SELECT COALESCE(NULL, NULL, NULL, 'runoob.com', NULL, 'google.com');
输出:runoob.com

x.IF(expr,v1,v2)
描述:如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。
实例:
SELECT IF(1 > 0,'正确','错误');
输出:正确

x.IFNULL(v1,v2)
描述:如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。
实例:
SELECT IFNULL(null,'Hello Word')
输出:Hello Word

x.ISNULL(expression)
描述:判断表达式是否为 NULL
实例:
SELECT ISNULL(NULL);
输出:1

x.NULLIF(expr1, expr2)
描述:比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1
实例:
SELECT NULLIF(25, 25);
输出:(null)

x.CASE expression WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... WHEN conditionN THEN resultN ELSE result END
描述:CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则返回 result1, 如果 condition2 成立,则返回 result2,当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。
实例:
SELECT CASE 
WHEN 1 > 0
THEN '1 > 0'
WHEN 2 > 0
THEN '2 > 0'
ELSE '3 > 0'
END;
输出:1 > 0

- 转换

x.CONVERT(s USING cs)
描述:函数将字符串 s 的字符集变成 cs
实例1:
​​​SELECT CHARSET('ABC')
输出:utf-8    
实例2:
SELECT CHARSET(CONVERT('ABC' USING gbk))
输出:gbk

x.BIN(x)
描述:返回 x 的二进制编码,x 为十进制数
实例:15 的 2 进制编码:
SELECT BIN(15);
输出:1111

x.CONV(x,f1,f2)
描述:返回 f1 进制数变成 f2 进制数
实例:
SELECT CONV(15, 10, 2);
输出:1111

x.BINARY(s)
描述:将字符串 s 转换为二进制字符串
实例:
SELECT BINARY "RUNOOB";
输出:RUNOOB

x.CAST(x AS type)
描述:转换数据类型
实例:字符串日期转换为日期:
SELECT CAST("2023-12-7" AS DATE);
输出:2023-12-7

- 管理员

x.SESSION_USER() / SYSTEM_USER() / USER() / CURRENT_USER()
描述:返回当前用户
实例:
SELECT SESSION_USER(); / SELECT SYSTEM_USER(); / SELECT USER(); / SELECT CURRENT_USER();​​​​​
输出:root@localhost

x.DATABASE()
描述:返回当前数据库名
实例:
SELECT DATABASE();   
输出:db_test

x.VERSION()
描述:返回数据库的版本号
实例:
SELECT VERSION();
输出:8.0.34

x.CONNECTION_ID()
描述:返回唯一的连接 ID
实例:
SELECT CONNECTION_ID();
输出:9

五、MySQL 8.0 版本新增的一些常用函数

分为json的创建和查询、排名函数两大类

- 创建json

x.JSON_OBJECT()
描述:将键值对转换为 JSON 对象
实例:
SELECT JSON_OBJECT('key1', 'value1', 'key2', 'value2');
输出:{\"key1\": \"value1\", \"key2\": \"value2\"}

x.JSON_ARRAY()
描述:将值转换为 JSON 数组
实例:
SELECT JSON_ARRAY(1, 2, 'three');
输出:[1, 2, \"three\"]

- 查询json

x.JSON_EXTRACT()
描述:从 JSON 字符串中提取指定的值
实例:
SELECT JSON_EXTRACT('{"name": "John", "age": 30}', '$.name');
输出:\"John\"

x.JSON_CONTAINS()
描述:检查一个 JSON 字符串是否包含指定的值
实例:
SELECT JSON_CONTAINS('{"name": "John", "age": 30}', '"John"', '$.name');
输出:0

- 排名函数

x.ROW_NUMBER()
描述:为查询结果中的每一行分配一个唯一的数字
实例:row_number() over (order by 列) 添加不重复行号:123456
SELECT ROW_NUMBER() OVER(ORDER BY id), name FROM users

x.RANK()
描述:为查询结果中的每一行分配一个排名
实例1:rank() over (order by 列 desc)  并列且跳过:113446
实例2:dense_rank() over (order by 列 desc)  并列且不跳过:112334
SELECT RANK() OVER(ORDER BY score DESC) AS rank, name, score FROM students

x.LAG()
描述:
实例:lag(列,1,x) over()  123456->x12345

x.LEAD()
描述:
实例:lead(列,1,x) over() 123456->2345X

PS:本文为个人总结,如有错误欢迎指出。

你可能感兴趣的:(mysql,数据库,学习,笔记,数据分析)