oracle日期格式tochar,Oracle日期格式转换,tochar(),todate()

本文主要介绍Oracle中的日期转换。

1. 日期转化为字符串 (以2016年10月20日为例)

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') strDateTime from dual; --获取年-月-日 时:分:秒

--显示结果为:2016-10-20 12:35:21

select to_char(sysdate,'yyyymmdd hh24:mi:ss') strDateTime from dual; --获取年月日 时:分:秒

--显示结果为:20161020 13:39:25

select to_char(sysdate,'yyyymmdd') strDateTime from dual; --获取年月日

--显示结果为:20161020

select to_char(sysdate,'yyyy') strYear from dual; --获取年

--显示结果为:2016

select to_char(sysdate,'mm') strMonth from dual; --获取月

--显示结果为:10

select to_char(sysdate,'dd') strDay from dual; --获取日

--显示结果为:20

select to_char(sysdate,'hh24') strHour from dual; --获取时

--显示结果为:13

select to_char(sysdate,'mi') strMinute from dual; --获取分

--显示结果为:46

select to_char(sysdate,'ss') strSecond from dual; --获取秒

--显示结果为:43

2. 字符串和时间互转:to_date()

to_date(‘A','B')的重点是前后的A,B格式要一样,或者A不能比B多字符,如果A有字符,B必须也要有,或者有代替的其他字符。

例如

select to_date('2012-10-20','yyyymmdd') from dual

前面比后面的格式多了" - "符号,就会报错。

ORA:无效的月份

但是如果前面没有符号,后面有符号,如下面的格式比前面多了" - “符号,依然能输出:

select to_date('20051225,132559','yyyy-mm-dd,hh24:mi:ss') from dual;

输出结果:

::

只要格式一样就能输出date类型的格式。

如:

','yyyymmdd') from dual

输出结果:

再比如:

select to_date('2012-10-20','yyyy-mm-dd') from dual

输出结果:

再比如:

select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh24:mi:ss') from dual;

输出结果:

::

如果A有字符,B必须也要有,或者有代替的字符

select to_date('2010-10-20 13:23:44','yyyy/mm/dd hh24:mi:ss') dateTime from dual;

select to_date('2005:12:25','yyyy-mm-dd,hh24:mi:ss') from dual;

select to_date('2005/12/25','yyyy-mm-dd,hh24:mi:ss') from dual;

以上的几个公式中,A都有字符” - " 和 “ :”,但是后面的B用字符“ / ” 代替。同样输出同样的结果:

::

当省略HH、MI和SS对应的输入参数时,Oracle使用0作为DEFAULT值。如果输入的日期数据忽略时间部分,Oracle会将时、分、秒部分都置为0,也就是说会取整到日。如:

select to_date('2007-06-12 ', 'yyyy-mm-dd hh24:mi:ss') from dual;

输出:

同样,忽略了DD参数,Oracle会采用1作为日的默认值,也就是说会取整到月。

select to_date('2007-06 ', 'yyyy-mm hh24:mi:ss') from dual;

输出:

但是,不要被这种“惯性”所迷惑,如果忽略MM参数,Oracle并不会取整到年,取整到当前月。

注意:

1.在使用Oracle的to_date函数来做日期转换时,可能会直觉地采用“yyyy-MM-dd HH:mm:ss”的格式作为格式进行转换,但是在Oracle中会引起错误:“ORA 01810 格式代码出现两次”。如:select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;

原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。

select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;

2.另要以24小时的形式显示出来要用HH24

select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分钟

select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm会显示月份

如果按照下面的例子写,会报错:ORA-01849:小时值必须介于1和12之间。(因为其中的hh是12进制,没有13所以报错)

select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh:mi:ss') from dual;

3. 查询某天是星期几

select to_char(to_date('2012-10-20','yyyy-mm-dd'),'day') strDay from dual;

显示结果:星期六

select to_char(to_date('2012-10-20','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = English') strDay from dual;

显示结果:saturday

4. 两个日期间的天数

','yyyymmdd')) strTime from dual;

--其中sysdate=2016/10/20 17:10:51

--显示结果:10

5. 时间为null的用法

select to_date(null) from dual;

6.月份差

select months_between(date'2014-04-23',date'2013-04-23') days from dual;

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值