Oracle 与 MySQL 的差异分析(7):日期和时间函数
1 获取当前日期和时间
1.1Oracle
Oracle 中的日期类型是带有时分秒的,获取当前时间可以用sysdate,如果要获得更高的精度可以用 systimestamp。查出来的结果的格式受系统参数控制,相当于做了默认的to_char 操作。
1.2 MySQL
curdate():获取当前日期,不包括时分秒。
curtime():获取当前时间,不包含日期。
now()/sysdate():获取当前时间和日期。
2 字符串和日期的转换
2.1Oracle
to_date:字符串到时间的转换
to_char:时间到字符串的转换
常用的日期格式有 yyyymmddhh24miss 和yyyy-mm-dd hh24:mi:ss。
如果时间带AM/PM,那么日期格式可以用 yyyy-mm-dd hh:mi:ssam。
eg:
select to_char(sysdate, ’yyyymmddhh24miss ’),
to_date(‘2017-06-01 9:25:40’, ‘yyyy-mm-ddhh24:mi:ss’),
to_date(‘2017-06-01 9:25:40 PM’, ‘yyyy-mm-ddhh:mi:ss am’)
from dual;
2.2 MySQL
str_to_date:字符串到时间的转换
date_format():时间到字符串的转换
常用的日期格式是 %Y-%m-%d %H:%i:%s
eg:
select str_to_date(‘2008-4-215:3:28’, ‘%Y-%m-%d %H:%i:%s’);
select date_format(now(), ‘%Y-%m-%d%H:%i:%s’);
3 日期和时间的截取
3.1Oracle
trunc:将日期类型截取到天、月、年、分、小时。
to_char:获取日期类型的天、月、年、分、小时、秒。
eg:
select trunc(sysdate),trunc(sysdate, ‘mm’) from dual;
结果:2017/4/18 2017/4/1
select to_char(sysdate, ’hh24’)from dual;
结果:09
注意:trunc的结果仍然是date类型,而to_char的结果是字符串。
3.2 MySQL
MySQL中似乎没有类似Oracle的trunc函数,可以用date_format获取想要的日期格式。
extract:获取日期的一部分。
eg:
select extract(hour from now());
结果:1
4 日期和时间的计算
4.1Oracle
+ N:对 date类型加1表示加1天,那么1小时可以用1/24表示,同理1秒=1/86400。
numtodsinterval:同样表示时间间隔,1秒可以表示为numtodsinterval(1, ’second’)。
add_months:增加N月。
eg:
select sysdate, sysdate + 1,sysdate + numtodsinterval(1, ’hour’),
add_months(sysdate, 3)
from dual;
结果:2017-04-18 10:39:41 2017-04-19 10:39:41 2017-04-18 11:39:41
2017-07-18 10:39:41+
4.2 MySQL
+ interval:对日期时间类型加1天、1秒、1月等。
eg:
select now(), now() + interval 1second;
结果:2017-04-18 10:47:41 2017-04-18 10:47:42
select now(), now() + interval 1day;
结果:2017-04-18 10:47:41 2017-04-19 10:47:41
date_add/adddate:和直接用interval结果一样。
date_sub:用于减一个interval。
eg:
select now(), date_add(now(),interval 1 second);
结果:2017-04-18 10:46:02 2017-04-18 10:46:03
select now(), date_add(now(),interval 1 month);
结果:2017-04-18 10:46:02 2017-05-18 10:46:02
select now(), date_sub(now(),interval 1 second);
结果:2017-04-18 10:51:10 2017-04-18 10:51:09
datediff:计算两个日期之间间隔的天数。
eg:
select datediff(now(), str_to_date(‘2009-02-02’,‘%Y-%m-%d’));
结果:2997