mysql和oracle常用日期函数总结

前言

日期处理是一个比较繁琐的事情,通常可以针对具体问题百度和查询资料进行处理,所谓:具体问题,具体分析

一、mysql常用处理函数

 

SET @dt = '2019-06-24';--设定具体某一天时间

1.extract(属性 from date)从时间中截取固定属性的日期,可以直接运行下面代码,获取自己所需的逻辑

SELECT EXTRACT(YEAR FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(MONTH FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(DAY FROM '2017-05-15 10:37:14.123456');
SELECT EXTRACT(HOUR FROM '2017-05-15 10:37:14.123456');
 

2.DATE_ADD(date,INTERVAL expr type) 从日期加上指定的时间间隔,这个主要用在截取时间判断上
-- type参数可参考:http://www.w3school.com.cn/sql/func_date_sub.asp

常用:YEAR,MONTH,DAY,HOUR,用来做时间切片

SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 YEAR);-- 表示:2018-05-15 10:37:14.123456
SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 MONTH);-- 表示:2017-06-15 10:37:14.123456
SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 DAY);-- 表示:2017-05-16 10:37:14.123456
SELECT DATE_ADD('2017-05-15 10:37:14.123456',INTERVAL 1 HOUR);-- 表示:2017-05-15 11:37:14.123456

备注:YEAR,QUARTER,MONTH,WEEK,DAY,HOUR,MINUTE,SECOND,MICROSECOND, date_sub() 日期时间函数 和 date_add() 用法一致,并且可以用INTERNAL -1 xxx的形式互换使用;下同

3.DATE_SUB(date,INTERVAL expr type) 从日期减去指定的时间间隔

SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 YEAR);-- 表示:2016-05-15 10:37:14.123456
SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 MONTH);-- 表示:2017-04-15 10:37:14.123456
SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 DAY);-- 表示:2017-05-14 10:37:14.123456
SELECT DATE_SUB('2017-05-15 10:37:14.123456',INTERVAL 1 HOUR);-- 表示:2017-05-15 09:37:14.123456

4.日期时间格式化 MySQL str_to_date (字符串转换为日期)函数:str_to_date(date, format)
 
SELECT STR_TO_DATE('06.05.2017 19:40:30', '%m.%d.%Y %H:%i:%s');-- 2017-06-05 19:40:30

5.日期时间格式化 MySQL 函数:DATE_FORMAT(date, format) ,根据format字符串格式化date值
SELECT DATE_FORMAT('2017-05-12 17:03:51', '%Y年%m月%d日 %H时%i分%s秒');-- 2017年05月12日 17时03分51秒(具体需要什么格式的数据根据实际情况来;小写h为12小时制;)
备注:STR_TO_DATE()和DATE_FORMATE()为互逆操作 ,time_format()只能用于时间的格式化

//下列修饰符可以被用在format字符串中: 
%M 月名字(January……December)  
%W 星期名字(Sunday……Saturday)  
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)  
%Y 年, 数字, 4 位  
%y 年, 数字, 2 位  
%a 缩写的星期名字(Sun……Sat)  
%d 月份中的天数, 数字(00……31)  
%e 月份中的天数, 数字(0……31)  
%m 月, 数字(01……12)  
%c 月, 数字(1……12)  
%b 缩写的月份名字(Jan……Dec)  
%j 一年中的天数(001……366)  
%H 小时(00……23)  
%k 小时(0……23)  
%h 小时(01……12)  
%I 小时(01……12)  
%l 小时(1……12)  
%i 分钟, 数字(00……59)  
%r 时间,12 小时(hh:mm:ss [AP]M)  
%T 时间,24 小时(hh:mm:ss)  
%S 秒(00……59)  
%s 秒(00……59)  
%p AM或PM  
%w 一个星期中的天数(0=Sunday ……6=Saturday )  
%U 星期(0……52), 这里星期天是星期的第一天  
%u 星期(0……52), 这里星期一是星期的第一天  
%% 一个文字“%”。  

6.DATE(date, format) 将日期处理成我们需要的日期格式做判断

  • DATE - 格式 YYYY-MM-DD
  • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
  • YEAR - 格式 YYYY 或 YY

select date(sysdate()), date_format(now(), '%Y-%m-%d'),date_format(now(), '%Y/%m/%d'), sysdate();

二、Oracle常用函数整理

1.在oracle中存储日期和时间是用Date类型
2.to_char()将时间值转为字符串
(1)to_char(x[,format]):用于将时间值x转换为字符串,其中format是可以用来规定x的时间格式
(2)年月日时分秒:yyyy-mm-dd hh24:mi:ss
3.to_date()将字符串转为时间值
(1)to_date(x[,format]]):将字符串x转换为时间值,可以使用format来规定x的格式,如果没有指定参数format,会采用数据库默认的格式dd-mon-yyyy或者dd-mon-yy

mysql和oracle常用日期函数总结_第1张图片
 

4.时间差 interval()

select sysdate,sysdate - interval '7' year from dual ---当前时间减7年

select sysdate,sysdate - interval '7' month from dual ---当前时间减7个月

select sysdate,sysdate - interval '7' day from dual ---当前时间减7天

5.两个日期间的天数
select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;

mysql和oracle常用日期函数总结_第2张图片

备注:计算时间差,可以用来计算年龄和时长

 

 

4.相关的时间值函数
(1)add_months(x,y) 返回x加上y个月后的结果,如果y是负数,就从x中减去y个月

select * from table where created_time> =add_months(sysdate, -1)   ##近1个月的相关信息
(2)last_day(x)  返回包含x的月份的最后一天
(3)months_between(x,y) 返回x和y之间有几个月。如果x在日历中比y晚,则返回值是正数;如果x在日历中比y早,则返回负数,否则返回0
(4)next_day(x,day) 返回从x开始,下一个day的时间值:day是一个文本字符串
(5)round(x[,unit])对x进行取整。默认情况下x取整为最近的一天,unit是一个可选的字符串参数,它指明要取整的单元
(6)trunc(x[,unit]) 对x截断,默认情况下,x被截断为当天的开始时间,unit是一个可选字符串参数,他指明了要截断的单元。

select sysdate S1,
TO_CHAR(trunc(sysdate),'YYYY-MM-DD') Days,--日期格式转换
trunc(sysdate) S2,                 --返回当前日期,无时分秒
trunc(sysdate,'year') YEAR,        --返回当前年的1月1日,无时分秒
trunc(sysdate,'month') MONTH ,     --返回当前月的1日,无时分秒
trunc(sysdate,'day') DAY           --返回当前星期的星期天,无时分秒
from dual
mysql和oracle常用日期函数总结_第3张图片

备注:

1.select trunc(sysdate) from dual --2019/6/24 今天的日期为2019/6/24
2.select trunc(sysdate, 'mm') from dual --2019/6/1 返回当月.
3.select trunc(sysdate,'yy') from dual --2019-1-1 返回当年
4.select trunc(sysdate,'dd') from dual --2019/6/24 返回当前年月日
5.select trunc(sysdate,'yyyy') from dual --2019-1-1 返回当年第一天
6.select trunc(sysdate,'d') from dual --2019/6/23 (星期天)返回当前星期的第一天
7.select trunc(sysdate, 'hh') from dual --2019/6/24 17:00:00 
8.select trunc(sysdate, 'mi') from dual --2019/6/24 17:57:00 TRUNC()函数没有秒的精确

 

你可能感兴趣的:(数据分析)