专栏首页微光点亮星辰Oracle 与 MySQL 的差异分析(7):日期和时间函数

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

本文分享自微信公众号 - 微光点亮星辰(SandTower),作者:铁杆粉丝

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-06-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 软件工程的那些图

    小编最近在画各种图,正好和大家一起复习一下。说到软件工程,不得不说一个语言:UML,即Unified Modeling Language ,统一建模语言...

    聚沙成塔
  • JVM是如何分配管理内存的?

    本文成文参考了《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》和《Java虚拟机规范(Java SE 8版)》,这是两本难得的好书,推荐大家购买...

    聚沙成塔
  • 面试题集锦

    解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。

    聚沙成塔
  • 洛谷P1134 阶乘问题

    题目描述 也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如: 12! = 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 ...

    attack
  • 如何在“无设计”语境下打磨界面设计中的极致细节体验?

    微博是一款典型的信息流产品,早期微博IM复用了信息流的一些设计,并且已经很久没做大的更新迭代,导致现有的设计与实际场景不符。为了让用户更自然的聚焦在对话体验之中...

    前朝楚水
  • 镁客请讲 | 知北信息杨眉:精准定位口腔诊疗行业痼疾,合AI与3D打印之力去变革优化

    2018年,数字化医疗迎来第二波浪潮,对于知北信息这样的企业,全力打造自身能力和抢占行业资源成为刻不容缓的事情。

    镁客网
  • 【jvm】01- java内存结构分析

    每一个方法的执行就是一个栈帧,而且在栈内存中遵循先进后出的原理。听到这里,是不是感觉不是很懂(大佬直接忽略)? 我们来看一个示例:

    envoke
  • 2.5 alias命令

    which 是用来查看一个文件所在的路径 alias 命令可查看系统所有的 别名命令 PATH 系统的环境变量 echo $PATH 可以查看环境...

    运维小白
  • HDUOJ----1250 Hat's Fibonacci

    Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32...

    Gxjun
  • Day21-二叉树-二叉树的右视图

    接下来遍历到5节点,这时高度还是1,但数组的size()为2,二者并不相同了,所以要更新view数组,来保证存储的是最右边的节点。

    BUPTrenyi

扫码关注云+社区

领取腾讯云代金券