Oracle和MySQL的常用函数比较(二)

上一节我们主要比较和学习了字符串函数,本节我们来比较和学习应用广泛的日期函数。

日期函数

  • 当前日期和时间(current date ,current time):
  • Oracle
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> select current_date from dual;

CURRENT_DATE
-------------------
2019-07-30 12:03:10


SQL> select current_timestamp from dual;

CURRENT_TIMESTAMP
---------------------------------------------------------------------------
30-JUL-19 09.58.07.263945 AM +08:00

SQL> 
SQL> select sysdate from dual;

SYSDATE
-------------------
2019-07-30 11:36:18

SQL> select systimestamp from dual;

SYSTIMESTAMP
---------------------------------------------------------------------------
30-JUL-19 11.36.28.261302 AM +08:00

SQL> 

  • MySQL
mysql> select curdate();
+------------+
| curdate()  |
+------------+
| 2019-07-30 |
+------------+
1 row in set (0.00 sec)

mysql> select curtime();
+-----------+
| curtime() |
+-----------+
| 09:59:49  |
+-----------+
1 row in set (0.00 sec)

mysql> 
mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2019-07-30 09:55:59 |
+---------------------+
1 row in set (0.00 sec)

  • 日期提取(extract):
  • Oracle
SQL> select extract(day from sysdate) from dual;

EXTRACT(DAYFROMSYSDATE)
-----------------------
                     30

SQL> select extract(month from sysdate) from dual;

EXTRACT(MONTHFROMSYSDATE)
-------------------------
                        7

SQL> 
  • MySQL
mysql> select extract(day from now());
+-------------------------+
| extract(day from now()) |
+-------------------------+
|                      30 |
+-------------------------+
1 row in set (0.00 sec)

mysql> select extract(month from now());
+---------------------------+
| extract(month from now()) |
+---------------------------+
|                         7 |
+---------------------------+
1 row in set (0.00 sec)

mysql> 
  • 日期加法(add_months,date_add):
  • Oracle
SQL> select add_months(date '2016-10-01',1) from dual;

ADD_MONTHS(DATE'201
-------------------
2016-11-01 00:00:00


SQL> select date '2016-10-01'+1 from dual;

DATE'2016-10-01'+1
-------------------
2016-10-02 00:00:00


SQL>  select date '2016-10-01'+365 from dual;

DATE'2016-10-01'+36
-------------------
2017-10-01 00:00:00

SQL> 

SQL> select timestamp '2016-10-01 01:02:03'+1/24 from dual;

TIMESTAMP'2016-10-0
-------------------
2016-10-01 02:02:03

SQL> select timestamp '2016-10-01 01:02:03'+1/24/60 from dual;

TIMESTAMP'2016-10-0
-------------------
2016-10-01 01:03:03

SQL> select timestamp '2016-10-01 01:02:03'+1/24/60/60 from dual;

TIMESTAMP'2016-10-0
-------------------
2016-10-01 01:02:04

SQL> 
  • MySQL
mysql> select date_add('2016-01-01',interval 1 day) ;
+---------------------------------------+
| date_add('2016-01-01',interval 1 day) |
+---------------------------------------+
| 2016-01-02                            |
+---------------------------------------+
1 row in set (0.00 sec)

mysql> select date_add('2016-01-01',interval 1 month) ;
+-----------------------------------------+
| date_add('2016-01-01',interval 1 month) |
+-----------------------------------------+
| 2016-02-01                              |
+-----------------------------------------+
1 row in set (0.00 sec)

mysql> select date_add('2016-01-01',interval 1 year) ;
+----------------------------------------+
| date_add('2016-01-01',interval 1 year) |
+----------------------------------------+
| 2017-01-01                             |
+----------------------------------------+
1 row in set (0.00 sec)

mysql> select date_add('2016-01-01 02:03:04',interval 1 hour);
+-------------------------------------------------+
| date_add('2016-01-01 02:03:04',interval 1 hour) |
+-------------------------------------------------+
| 2016-01-01 03:03:04                             |
+-------------------------------------------------+
1 row in set (0.00 sec)

mysql> select date_add('2016-01-01 02:03:04',interval 1 minute);
+---------------------------------------------------+
| date_add('2016-01-01 02:03:04',interval 1 minute) |
+---------------------------------------------------+
| 2016-01-01 02:04:04                               |
+---------------------------------------------------+
1 row in set (0.00 sec)

mysql> select date_add('2016-01-01 02:03:04',interval 1 second);
+---------------------------------------------------+
| date_add('2016-01-01 02:03:04',interval 1 second) |
+---------------------------------------------------+
| 2016-01-01 02:03:05                               |
+---------------------------------------------------+
1 row in set (0.00 sec)

mysql> select date_add('2016-01-01 02:03:04',interval '1-1' year_month);
+-----------------------------------------------------------+
| date_add('2016-01-01 02:03:04',interval '1-1' year_month) |
+-----------------------------------------------------------+
| 2017-02-01 02:03:04                                       |
+-----------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select date_add('2016-01-01 02:03:04',interval '1 1' day_hour);
+---------------------------------------------------------+
| date_add('2016-01-01 02:03:04',interval '1 1' day_hour) |
+---------------------------------------------------------+
| 2016-01-02 03:03:04                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select date_add('2016-01-01 02:03:04',interval '1 1:1' day_minute);
+-------------------------------------------------------------+
| date_add('2016-01-01 02:03:04',interval '1 1:1' day_minute) |
+-------------------------------------------------------------+
| 2016-01-02 03:04:04                                         |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select date_add('2016-01-01 02:03:04',interval '1:1' hour_minute);
+------------------------------------------------------------+
| date_add('2016-01-01 02:03:04',interval '1:1' hour_minute) |
+------------------------------------------------------------+
| 2016-01-01 03:04:04                                        |
+------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> 
  • 日期差值(diff):
  • Oracle
SQL> select months_between(date '2016-10-01', date '2016-11-01') from dual;

MONTHS_BETWEEN(DATE'2016-10-01',DATE'2016-11-01')
-------------------------------------------------
                                               -1

SQL> select timestamp '2016-10-01 01:02:03' - timestamp '2016-11-01 01:02:03' from dual;

TIMESTAMP'2016-10-0101:02:03'-TIMESTAMP'2016-11-0101:02:03'
---------------------------------------------------------------------------
-000000031 00:00:00.000000000

SQL> select timestamp '2016-10-01 01:02:03' - timestamp '2016-11-01 02:03:04' from dual;

TIMESTAMP'2016-10-0101:02:03'-TIMESTAMP'2016-11-0102:03:04'
---------------------------------------------------------------------------
-000000031 01:01:01.000000000

SQL> 
  • MySQL
mysql> select datediff('2016-01-01','2016-02-01');
+-------------------------------------+
| datediff('2016-01-01','2016-02-01') |
+-------------------------------------+
|                                 -31 |
+-------------------------------------+
1 row in set (0.00 sec)

mysql> select timediff('2016-01-01 01:02:03','2016-01-02 02:03:04');
+-------------------------------------------------------+
| timediff('2016-01-01 01:02:03','2016-01-02 02:03:04') |
+-------------------------------------------------------+
| -25:01:01                                             |
+-------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select timestampdiff(hour,'2016-10-01 01:02:03','2016-10-01 02:03:04');
+-----------------------------------------------------------------+
| timestampdiff(hour,'2016-10-01 01:02:03','2016-10-01 02:03:04') |
+-----------------------------------------------------------------+
|                                                               1 |
+-----------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select timestampdiff(minute,'2016-10-01 01:02:03','2016-10-01 02:03:04');
+-------------------------------------------------------------------+
| timestampdiff(minute,'2016-10-01 01:02:03','2016-10-01 02:03:04') |
+-------------------------------------------------------------------+
|                                                                61 |
+-------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select timestampdiff(second,'2016-10-01 01:02:03','2016-10-01 02:03:04');
+-------------------------------------------------------------------+
| timestampdiff(second,'2016-10-01 01:02:03','2016-10-01 02:03:04') |
+-------------------------------------------------------------------+
|                                                              3661 |
+-------------------------------------------------------------------+
1 row in set (0.00 sec)

  • 日期取整,截取(round,trunc):
  • Oracle
SQL> select round(timestamp '2016-10-01 01:02:03','yy') from dual;

ROUND(TIMESTAMP'201
-------------------
2017-01-01 00:00:00

SQL>  select round(timestamp '2016-10-01 01:02:03','mm') from dual;

ROUND(TIMESTAMP'201
-------------------
2016-10-01 00:00:00

SQL> select round(timestamp '2016-10-16 01:02:03','mm') from dual;

ROUND(TIMESTAMP'201
-------------------
2016-11-01 00:00:00

SQL> select round(timestamp '2016-10-01 01:02:03','dd') from dual;

ROUND(TIMESTAMP'201
-------------------
2016-10-01 00:00:00

SQL> select round(timestamp '2016-10-01 13:02:03','dd') from dual;

ROUND(TIMESTAMP'201
-------------------
2016-10-02 00:00:00

SQL> select trunc(date '2016-02-03','yy') from dual;

TRUNC(DATE'2016-02-
-------------------
2016-01-01 00:00:00

SQL> select trunc(date '2016-02-03','mm') from dual;

TRUNC(DATE'2016-02-
-------------------
2016-02-01 00:00:00

SQL> select trunc(date '2016-02-03','dd') from dual;

TRUNC(DATE'2016-02-
-------------------
2016-02-03 00:00:00

  • MySQL
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容

  • MySql取得日期(前一天、某一天) 取得当天: SELECT curdate(); mysql> SELECT ...
    laravel阅读 1,631评论 0 4
  • 一、MySQL 获得当前日期时间 函数 1.1 获得当前日期 + 时间(date + time) 函数:now()...
    梦遇缱绻的馥郁阅读 846评论 0 1
  • 一、MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time)函数:now() my...
    极简架构阅读 1,213评论 0 1
  • -- MySQL日期时间处理函数 -- 当前日期:2017-05-12(突然发现今天512,是不是会拉防空警报) ...
    sph_ui阅读 3,373评论 2 3
  • 这一天,正是阳春三月三,西湖边上非常热闹,游客很多,摆摊的小贩也很多。上八洞神仙吕洞宾也来凑热闹,变成了个老头卖汤...
    阅之心阅读 743评论 0 1