MySQL中与日期有关的函数与使用

本文详细介绍了MySQL中用于获取当前日期、时间、日期时间的函数,如CURDATE(),CURTIME(),CURRENT_TIMESTAMP等,以及日期格式化函数DATE_FORMAT,提供了多种格式化参数的示例。还讨论了日期计算相关的函数,如DATE_ADD,DATE_SUB,DATEDIFF等,并展示了如何获取特定时间的日期,如本年的第一天、最后一天,本月和本季度的起始及结束日期等。
摘要由CSDN通过智能技术生成
-- 1.日期函数 yyyy-mm-dd
select CURDATE(),CURRENT_DATE(), CURRENT_DATE;

-- 2.时间函数 HH24:MI:SS
select CURTIME(), CURRENT_TIME(), CURRENT_TIME;

-- 3.日期和时间函数(“日期+时间”的组合)
SELECT CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP, LOCALTIME(), LOCALTIME, LOCALTIMESTAMP(), LOCALTIMESTAMP, NOW(), SYSDATE();
-- NOW(), SYSDATE()的区别:NOW()返回执行当前SQL语句的时间、SYSDATE()返回执行当前函数的时间
SELECT SYSDATE(),NOW(),SLEEP(2),NOW(),SYSDATE();
-- SYSDATE()可以传入一个参数:fsp 表示是否包括小数秒精度(0~6位)
select sysdate(0), sysdate(3),sysdate(6);

-- 4.日期计算有关的函数
-- 格式化日期 DATE_FORMAT(date,format)
select DATE_FORMAT(now(),'%Y%m%d'); -- 返回yyyymmdd 格式的日期
-- 可用于格式化的字符与示例代码如下:常用的有%Y%m%d %H%i%s

注意:月份和日期说明符的范围从零开始,原因是 MySQL允许存储不完整的日期的事实 如。'2014-00-00'

select '%a' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%a'')' as 示例, date_format('2023-05-29 18:01:56','%a') as 结果, '英文周几的缩写 (Sun..Sat)' as 描述 union all
select '%b' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%b'')' as 示例, date_format('2023-05-29 18:01:56','%b') as 结果, '英文月份的缩写 (Jan..Dec)' as 描述 union all
select '%c' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%c'')' as 示例, date_format('2023-05-29 18:01:56','%c') as 结果, '月份,数字(00-12)' as 描述 union all
select '%D' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%D'')' as 示例, date_format('2023-05-29 18:01:56','%D') as 结果, '带英语后缀的月份中的第几天 (0th,1st,2nd,3rd...)' as 描述 union all
select '%d' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%d'')' as 示例, date_format('2023-05-29 18:01:56','%d') as 结果, '月的第几天,数字 (00-31)' as 描述 union all
select '%e' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%e'')' as 示例, date_format('2023-05-29 18:01:56','%e') as 结果, '月的第几天,数字 (0-31)' as 描述 union all
select '%f' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%f'')' as 示例, date_format('2023-05-29 18:01:56','%f') as 结果, '微秒 (000000-999999)' as 描述 union all
select '%H' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%H'')' as 示例, date_format('2023-05-29 18:01:56','%H') as 结果, '小时 (00-23)' as 描述 union all
select '%h' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%h'')' as 示例, date_format('2023-05-29 18:01:56','%h') as 结果, '小时 (01-12)' as 描述 union all
select '%I' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%I'')' as 示例, date_format('2023-05-29 18:01:56','%I') as 结果, '小时 (01-12)' as 描述 union all
select '%i' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%i'')' as 示例, date_format('2023-05-29 18:01:56','%i') as 结果, '分钟,数字 (00-59)' as 描述 union all
select '%j' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%j'')' as 示例, date_format('2023-05-29 18:01:56','%j') as 结果, '年的第几天,1号为第一天(001-366)' as 描述 union all
select '%k' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%k'')' as 示例, date_format('2023-05-29 18:01:56','%k') as 结果, '小时 (0-23)' as 描述 union all
select '%l' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%l'')' as 示例, date_format('2023-05-29 18:01:56','%l') as 结果, '小时 (1-12)' as 描述 union all
select '%M' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%M'')' as 示例, date_format('2023-05-29 18:01:56','%M') as 结果, '月份英文名全称 (.January..December)' as 描述 union all
select '%m' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%m'')' as 示例, date_format('2023-05-29 18:01:56','%m') as 结果, '月份,数字 (00-12)' as 描述 union all
select '%p' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%p'')' as 示例, date_format('2023-05-29 18:01:56','%p') as 结果, 'AM或PM' as 描述 union all
select '%r' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%r'')' as 示例, date_format('2023-05-29 18:01:56','%r') as 结果, '12制小时(hh:mm:ss,后跟AM或者PM)' as 描述 union all
select '%S' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%S'')' as 示例, date_format('2023-05-29 18:01:56','%S') as 结果, '秒 (00-59)' as 描述 union all
select '%s' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%s'')' as 示例, date_format('2023-05-29 18:01:56','%s') as 结果, '秒 (00-59)' as 描述 union all
select '%T' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%T'')' as 示例, date_format('2023-05-29 18:01:56','%T') as 结果, '24制小时 (hh:mm:ss)' as 描述 union all
select '%U' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%U'')' as 示例, date_format('2023-05-28 18:01:56','%U') as 结果, '年的第几周,其中星期日是一周的第一天;00-53' as 描述 union all
select '%u' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%u'')' as 示例, date_format('2023-05-28 18:01:56','%u') as 结果, '年的第几周,其中星期一是一周的第一天;00-53' as 描述 union all
select '%V' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%V'')' as 示例, date_format('2023-05-28 18:01:56','%V') as 结果, '年的第几周,其中星期日是一周的第一天;01-53%X' as 描述 union all
select '%v' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%v'')' as 示例, date_format('2023-05-28 18:01:56','%v') as 结果, '年的第几周,其中星期一是一周的第一天;01-53%x' as 描述 union all
select '%W' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%W'')' as 示例, date_format('2023-05-28 18:01:56','%W') as 结果, '星期的英文全称 (Sunday..Saturday)' as 描述 union all
select '%w' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%w'')' as 示例, date_format('2023-05-28 18:01:56','%w') as 结果, '周几(0-6)(0=星期日。6=星期六)' as 描述 union all
select '%X' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%X'')' as 示例, date_format('2023-01-01 18:01:56','%X') as 结果, '当周的年份(星期天是一周第一天),四位数;与%V' as 描述 union all
select '%x' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%x'')' as 示例, date_format('2023-01-01 18:01:56','%x') as 结果, '当周的年份(星期一是一周的第一天),四位数;与%v' as 描述 union all
select '%Y' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%Y'')' as 示例, date_format('2023-05-29 18:01:56','%Y') as 结果, '年份,四位数字' as 描述 union all
select '%y' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%y'')' as 示例, date_format('2023-05-29 18:01:56','%y') as 结果, '年份,两位数字' as 描述 union all
select '%%' as 格式化参数, 'select date_format(''2023-05-29 18:01:56'',''%%'')' as 示例, date_format('2023-05-29 18:01:56','%%') as 结果, '文字字符%(2个%表1个%)' as 描述 ;
-- 5.常用的日期函数
-- MySQL的日期函数有很多,常用的函数除了123中提到的,还有:
DATE()	    获取日期或日期时间表达式的日期部分yyyy-mm-dd
TIME()	    提取日期或日期时间表达式的时间部分
YEAR()	    获取年份
QUARTER()	获取日期所在的季度(1-4)
MONTH()	    获取月份(0-12)
WEEK()	    一年的第几周,周日为第一天(1-53)
DAY()       返回月份中的某天 (0-31)
DAYOFMONTH() 返回月份中的某天 (0-31),同上
HOUR()      提取小时(00-23)
MINUTE()	提取分钟数(0-59)
SECOND()	返回秒数 (0-59)
MICROSECOND()	提取微秒(000000-999999)
YEARWEEK()	获取年份和周,周日为第一天(yyyy01-yyyy53)
WEEKDAY()      一周的第几天,周一为第一天(0-6)
DAYOFWEEK()    一周的第几天,周日为第一天(1-7)
DAYOFYEAR()    一年的第几天,1号为第一天 (1-366)
WEEKOFYEAR()   一年的第几周,周一为第一天
MAKEDATE(year,dayofyear)	 返回year年第dayofyear天的日期值
MAKETIME(Hour,minute,second) 返回 HH24:mi:ss 格式的时间,参数为小数时四舍五入取整
DAYNAME()	返回星期的英文名称
MONTHNAME()	返回月份的英文名称


EXTRACT(unit FROM date)	提取日期的一部分
LAST_DAY(date)	返回参数的月份的最后一天
DATE_ADD(date, interval 数值 unit)	日期值加指定时间单位的时间值
DATE_SUB(date, interval 数值 unit)	从日期中减去时间值(间隔)
DATEDIFF(datetime_expr1,datetime_expr2)	    两个日期相差的天数(前者大后者小)
TIMESTAMPDIFF(unit, datetime_expr1,datetime_expr2)	使用单位返回两个日期时间表达式的差值(前者小后者大)

-- 【除了常用的函数还有以下一些函数不常用的。】
FROM_DAYS()	将日期数字转换为日期
FROM_UNIXTIME()	将 Unix 时间戳格式化为日期
GET_FORMAT()	返回日期格式字符串
PERIOD_ADD()	向年月添加期间
PERIOD_DIFF()	返回周期之间的月数
SUBDATE()	使用三个参数调用时 DATE_SUB() 的同义词
SUBTIME()	减去时间
SEC_TO_TIME()	将秒转换为“hh:mm:ss”格式
STR_TO_DATE()	将字符串转换为日期
TIME_FORMAT()	格式化为时间
TIME_TO_SEC()	返回转换为秒的参数
TIMEDIFF()	减去时间
TIMESTAMP()	使用单个参数,此函数返回日期或日期时间 表达;有两个参数,参数的总和
TIMESTAMPADD()	向日期时间表达式添加间隔
TO_DAYS()	返回转换为天的日期参数
TO_SECONDS()	返回自 第 0 年
UNIX_TIMESTAMP()	返回 Unix 时间戳
UTC_DATE()	返回当前 UTC 日期
UTC_TIME()	返回当前 UTC 时间
UTC_TIMESTAMP()	返回当前 UTC 日期和时间


-- 6.日期函数的综合应用,求指定时间的日期
-- 个人认为MySQL中字符串与日期是可以发生隐式转换的,所以使用的时候比较方便,配合MySQL中日期函数,求指定时间日期的方法、语法也有很多,只要能得出想要的结果,怎么拼写都行。
1)本年的第一天
select concat(year(now()), '0101'), makedate(year(now()),1), date_sub(curdate(), interval dayofyear(now())-1 day);
2)本年的最后一天
select concat(year(now()), '1231'), last_day(makedate(year(now()),360));
3)本月的第一天
select concat(date_format(now(),'%Y%m'),'01'),date_sub(curdate(), interval dayofmonth(now())-1 day);
4)本月的最后一天
select last_day(now());
5)本季度的第一天
select date_format(concat(YEAR(now()),'0101') + interval QUARTER(now())*3-3 month,'%Y%m%d');
6)本季度的最后一天
select date_format(last_day(concat(YEAR(now()),'0101') + interval quarter(now())*3-1 month), '%Y%m%d');
7)本周的第一天(周日)
select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 1 DAY), date_sub(curdate(),INTERVAL DAYOFWEEK(curdate()) - 1 DAY);
8)本周的第一天(周一)
select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) DAY), date_sub(curdate(),INTERVAL DAYOFWEEK(curdate()) - 2 DAY);
9)本周的最后一天(周六)
select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) - 5 DAY), date_sub(curdate(),INTERVAL DAYOFWEEK(curdate()) - 7 DAY),date_add(curdate(),INTERVAL 5 - WEEKDAY(curdate()) DAY), date_add(curdate(),INTERVAL 7 - DAYOFWEEK(curdate()) DAY);
10)本周的最后一天(周日)
select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) - 6 DAY), date_sub(curdate(),INTERVAL DAYOFWEEK(curdate()) - 8 DAY),date_add(curdate(),INTERVAL 6 - WEEKDAY(curdate()) DAY), date_add(curdate(),INTERVAL 8 - DAYOFWEEK(curdate()) DAY);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值