to_date函数与当前系统时间格式转换问题总结

本文详细介绍了在Oracle数据库中如何使用TO_DATE函数进行日期格式转换。包括在时间和日期格式匹配时的隐式转换,以及当输入格式与系统默认格式不一致时如何显式指定格式字符串来完成转换。此外,还提供了多种特殊情况下的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.如to_date函数中时间格式与当前时间格式相符,可以不在函数中指定格式而完成隐式转换。

BYS@bys1>select sysdate from dual;

SYSDATE
-------------------

2013/10/25 09:40:31


BYS@bys1>select to_date('2013/10/25 09:40:31') from dual;
TO_DATE('2013/10/25
-------------------
2013/10/25 09:40:31

当前日期格式下,下面几种格式都可以隐式转换--应该是日期间连接符使用特殊字符都没问题,但是月与日、小时、分钟要能对上。

不能使用&,&表示传入变量。不能使用数字或字母字符。

BYS@bys1>select to_date('2013-02-21 10:00:00') from dual;
TO_DATE('2013-02-21
-------------------
2013/02/21 10:00:00


BYS@bys1>select to_date('2013-02#21 10:00+00') from dual;
TO_DATE('2013-02#21
-------------------
2013/02/21 10:00:00


BYS@bys1>select to_date('2013-02a21 10:00+00') from dual;
select to_date('2013-02a21 10:00+00') from dual
*
ERROR at line 1:
ORA-01861: literal does not match format string


BYS@bys1>select to_date('2013-02921 10:00+00') from dual;
select to_date('2013-02921 10:00+00') from dual
*
ERROR at line 1:
ORA-01861: literal does not match format string


BYS@bys1>select to_date('2013-02@21 10:00+00') from dual;
TO_DATE('2013-02@21
-------------------
2013/02/21 10:00:00

如果to_date函数中格式-字段长度与系统的不符的几种情况:

把最后的表示秒的字符省略,可以正常显示。

BYS@bys1>select to_date('2013-02@21 10:00') from dual;
TO_DATE('2013-02@21
-------------------
2013/02/21 10:00:00

把最后的表示秒的字符及表示具体几号的字符省略,报错。
BYS@bys1>select to_date('2013-@21 10:00') from dual;
select to_date('2013-@21 10:00') from dual
*
ERROR at line 1:
ORA-01858: a non-numeric character was found where a numeric was expected


只给出10点,分和秒未给出,以0代替。

BYS@bys1>select to_date('2013-02@21 10') from dual;
TO_DATE('2013-02@21
-------------------
2013/02/21 10:00:00

只给出日期的字段,时、分、秒用0来代替。
BYS@bys1>select to_date('2013-02@21 ') from dual;
TO_DATE('2013-02@21
-------------------
2013/02/21 00:00:00


只给出年-月,未给几号,报错。
BYS@bys1>select to_date('2013-02 ') from dual;
select to_date('2013-02 ') from dual
*
ERROR at line 1:
ORA-01840: input value not long enough for date format

BYS@bys1>select to_date('2013-02$1 ') from dual;
TO_DATE('2013-02$1'
-------------------
2013/02/01 00:00:00

2.to_date函数中时间格式与当前时间格式不符,需要在函数中显式指定时间格式来完成转换。

BYS@bys1>select sysdate from dual;
SYSDATE
---------
25-OCT-13

注意列宽,以免不能显示全。

BYS@bys1>col aa for a20
BYS@bys1>select to_date('2013-02-21 10:00:00','yyyy-mm-dd hh24:mi:ss') aa from dual;
AA
--------------------
21-FEB-13


不指定格式会报错:

BYS@bys1>select to_date('2013-02-21 10:00:00') from dual;
select to_date('2013-02-21 10:00:00') from dual
*
ERROR at line 1:
ORA-01861: literal does not match format string

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值