MySQL数据库中具有很多操作时间值的函数,每个时间和日期类型具有的值域及指定值的有效格式都不一样,我就频率使用多的函数进行了总结,为了熟悉这些函数,一方面我们需要看看说明文档,另一方面我们还需要实战一下练习几个栗子,这样效果更好。☟
⑴统计系统时间
SELECT NOW(); -- 2019-08-01 13:43:17
SELECT SYSDATE(); -- 2019-08-01 13:43:17
⑵提取当前时间
DATE(expr)
提取日期或时间日期表达式expr中的日期部分。
mysql> SELECT DATE(‘2003-12-31 01:02:03’);
-> ‘2003-12-31’
SELECT DATE('2019-08-01 01:02:03'); -- 2019-08-01
⑶ 获取当前日期
将当前日期按照’YYYY-MM-DD’ 或YYYYMMDD 格式的值返回,具体格式根据函数用在字符串或是数字语境中而定。
mysql> SELECT CURDATE();
-> ‘1997-12-15’
mysql> SELECT CURDATE() + 0;
-> 19971215
CURRENT_DATE和CURRENT_DATE()是的同义词.
SELECT CURRENT_DATE(); -- 2019-08-01
SELECT CURRENT_DATE()+0; -- 20190801
-- 查询已满30岁以上教师
SELECT * FROM teacher_info WHERE YEAR(CURRENT_DATE()) - YEAR(tbirthday) >= 30;
-- 查询入职已超过13年的教师
SELECT * FROM teacher_info WHERE YEAR(CURRENT_DATE) - YEAR(thiredate) >= 13;
测试表数据:
查询结果1:
查询结果2:
⑷ 获取当前时间
将当前时间以’HH:MM:SS’或 HHMMSS 的格式返回, 具体格式根据函数用在字符串或是数字语境中而定。
mysql> SELECT CURTIME();
-> ‘23:50:26’
mysql> SELECT CURTIME() + 0;
-> 235026
SELECT CURRENT_TIME(); -- 13:49:00
SELECT CURRENT_TIME()+0; -- 144114.000000
SELECT CURRENT_TIMESTAMP(); --2019-08-01 15:02:17 [时间戳]
Java中的时间戳
时间戳+用户编号可以用作生成的订单号
System.out.println(System.currentTimeMillis()); --1566634993016
⑸今天的星期
- DAY(date)
DAY() 和DAYOFMONTH()的意义相同。- DAYNAME(date)
返回date 对应的工作日名称。
mysql> SELECT DAYNAME(‘1998-02-05’);
-> ‘周四’- DAYOFMONTH(date)
返回date 对应的该月日期,范围是从 1到31。
mysql> SELECT DAYOFMONTH(‘1998-02-03’);
-> 3- DAYOFWEEK(date)
返回date (1 = 周日, 2 = 周一, …, 7 = 周六)对应的工作日索引。这些索引值符合 ODBC标准。
mysql> SELECT DAYOFWEEK(‘1998-02-03’);
-> 3- DAYOFYEAR(date)
返回date 对应的一年中的天数,范围是从 1到366。
mysql> SELECT DAYOFYEAR(‘1998-02-03’);
-> 34
WEEKDAY(date)
返回date (0 = 周一, 1 = 周二, … 6 = 周日)对应的工作日索引 weekday index for
mysql> SELECT WEEKDAY(‘1998-02-03 22:23:00’);
-> 1
mysql> SELECT WEEKDAY(‘1997-11-05’);
-> 2- WEEKOFYEAR(date)
将该日期的阳历周以数字形式返回,范围是从1到53。它是一个兼容度函数,相当于WEEK(date,3)。
mysql> SELECT WEEKOFYEAR(‘1998-02-20’);
-> 8
SELECT WEEK(CURRENT_DATE()); -- 30(一年中的第30周)
SELECT DAYOFWEEK(CURRENT_DATE); -- 5 (这周的第五天,按瑞典天数计算)
SELECT WEEKDAY(CURRENT_DATE); -- 3
SELECT DAYNAME(CURRENT_DATE); -- Thursday(星期四)
⑹计算间隔
DATEDIFF(expr,expr2)
DATEDIFF() 返回起始时间 expr和结束时间expr2之间的天数。Expr和expr2 为日期或 date-and-time 表达式。计算中只用到这些值的日期部分。
mysql> SELECT DATEDIFF(‘1997-12-31 23:59:59’,‘1997-12-30’);
-> 1
mysql> SELECT DATEDIFF(‘1997-11-30 23:59:59’,‘1997-12-31’);
-> -31
SELECT DATEDIFF(CURRENT_DATE(),‘2019-07-01’); – 31(天)
-- 查询入职已超过13周年的教师
SELECT * FROM teacher_info WHERE DATEDIFF(CURRENT_DATE,thiredate) >365*5;
⑺字符串与日期之间的格式化
SELECT STR_TO_DATE('2019年4月9日','%Y年%c月%e'); -- 将'2019年4月9日' -> '2019-04-09'
附加:DATE_FORMAT(date,format) ,是根据format 字符串安排date 值的格式。
以下说明符可用在 format 字符串中:
说明符 | 说明 |
---|---|
%a | 工作日的缩写名称 (Sun…Sat) |
%b | 月份的缩写名称 (Jan…Dec) |
%c | 月份,数字形式(0…12) |
%D | 带有英语后缀的该月日期 (0th, 1st, 2nd, 3rd, …) |
%d | 该月日期, 数字形式 (00…31) |
%e | 该月日期, 数字形式(0…31) |
%f | 微秒 (000000…999999) |
%H | 小时(00…23) |
%h | 小时(01…12) |
%I | 小时 (01…12) |
%i | 分钟,数字形式 (00…59) |
%j | 一年中的天数 (001…366) |
%k | 小时 (0…23) |
%l | 小时 (1…12) |
%M | 月份名称 (January…December) |
%m | 月份, 数字形式 (00…12) |
%p | 上午(AM)或下午( PM) |
%r | 时间 , 12小时制 (小时hh:分钟mm:秒数ss 后加 AM或PM) |
%S | 秒 (00…59) |
%s | 秒 (00…59) |
%T | 时间 , 24小时制 (小时hh:分钟mm:秒数ss) |
%U | 周 (00…53), 其中周日为每周的第一天 |
%u | 周 (00…53), 其中周一为每周的第一天 |
%V | 周 (01…53), 其中周日为每周的第一天 ; 和 %X同时使用 |
%v | 周 (01…53), 其中周一为每周的第一天 ; 和 %x同时使用 |
%W | 工作日名称 (周日…周六) |
%w | 一周中的每日 (0=周日…6=周六) |
%X | 该周的年份,其中周日为每周的第一天, 数字形式,4位数;和%V同时使用 |
%x | 该周的年份,其中周一为每周的第一天, 数字形式,4位数;和%v同时使用 |
%Y | 年份, 数字形式,4位数 |
%y | 年份, 数字形式 (2位数) |
%% | ‘%’文字字符 |
#轻松一刻:
☝上述分享来源个人总结,如果分享对您有帮忙,希望您积极转载;如果您有不同的见解,希望您积极留言,让我们一起探讨,您的鼓励将是我前进道路上一份助力,非常感谢!我会不定时更新相关技术动态,同时我也会不断完善自己,提升技术,希望与君同成长同进步!
☞本人博客:https://coding0110lin.blog.csdn.net/ 欢迎转载,一起技术交流吧!