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