天天看點

Oracle 與 MySQL 的差異分析(7):日期和時間函數

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