-- 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);