ORA-01722 oracle中的无效号码

时间:2015-03-07 17:21:12

标签: sql oracle

我在执行下面的select语句时收到无效的数字错误消息。任何人都可以对此问题有所了解。请让我知道。

select TO_DATE(TO_CHAR('2015/01/22 00:00:00','YYYY/MM/DD'),'YYYY/MM/DD')

实际上我想要oracle标准日期格式没有这个日期的时间戳'2015/01/22 00:00:00'

5 个答案:

答案 0 :(得分:1)

select to_date('2015/01/22 00:00:00','YYYY/MM/DD HH24:MI:SS') as dt
from dual

小提琴 - http://sqlfiddle.com/#!4/6a3a6/1/0

作为一个FYI,Oracle DATE数据类型确实包含时间组件(与TIMESTAMP数据类型的情况一样,不包括小数秒)。

如果要转换值并希望将所有时间值都设置为零,则可以使用trunc这样的函数(更改时间为12:07:00到00:00:00):

select trunc(to_date('2015/01/22 12:07:00','YYYY/MM/DD HH24:MI:SS'),'DD') as dt_with_time_zerod
from dual

小提琴 - http://sqlfiddle.com/#!4/6a3a6/2/0

如果源本身是一个日期,并且您希望将日期转换为Oracle默认日期格式的字符串(' DD-MON-RR'),您可以通过运行来实现:

select to_char(trunc(to_date('2015/01/22 12:07:00','YYYY/MM/DD HH24:MI:SS'),'DD'),'DD-MON-RR') as dt_with_time_zerod
from dual

小提琴 - http://sqlfiddle.com/#!4/6a3a6/3/0

答案 1 :(得分:0)

如果是日期字段,没有掩码的to_char将为您提供您想要的内容。

答案 2 :(得分:0)

  

实际上我想要oracle标准日期格式没有这个日期的时间戳'2015/01/22 00:00:00'

我不确定“Oracle标准日期格式”是什么意思。日期显示的格式将基于您的NLS设置(特别是NLS_DATE_FORMAT)。如果您只是尝试格式化表示日期的字符串,那么您可能需要以下内容:

SELECT TO_CHAR(TO_DATE('2015/01/22 00:00:00','YYYY/MM/DD HH:MI:SS'), 'YYYY/MM/DD')
  FROM dual;

也就是说,TO_CHAR()TO_DATE()函数的顺序错误,而TO_DATE()的调用日期掩码不完整。

答案 3 :(得分:0)

尝试使用标准ISO 8601 format的日期文字。

date '2015-01-22'

答案 4 :(得分:0)

如果您不想显示时间,我建议您不要给小时/分-秒。

这是我最简单的答案:

SELECT TO_DATE('2015/01/22','YYYY/MM/DD') FROM dual

Query Result