Oracle SQL to_date & to_timestamp ORA-01858: 在需要数字的地方发现了一个非数字字符 & ORA-01850: 小时必须在 0 到 23 之间

Posted

技术标签:

【中文标题】Oracle SQL to_date & to_timestamp ORA-01858: 在需要数字的地方发现了一个非数字字符 & ORA-01850: 小时必须在 0 到 23 之间【英文标题】:Oracle SQL to_date & to_timestamp ORA-01858: a non-numeric character was found where a numeric was expected & ORA-01850: hour must be between 0 and 23 【发布时间】:2014-12-11 14:45:25 【问题描述】:

我有一小段代码:

代码

SELECT to_date(it.DSTAMP, 'DD/MM/YYYY') AS "Date", to_timestamp(it.DSTAMP, 'HH24:MI:SS') AS Time
FROM itable it

错误

ORA-01858:在需要数字的地方发现了一个非数字字符 01858. 00000 - “在需要数字的地方发现了一个非数字字符” *原因:要使用日期格式模型转换的输入数据是 不正确。输入数据不包含数字 格式模型所要求的。 *行动:修复输入数据或日期格式模型,以确保 元素在数量和类型上匹配。然后重试操作。

如果我删除 to_date会出错

ORA-01850:小时必须在 0 到 23 之间 01850. 00000 - “小时必须在 0 到 23 之间” *原因: *行动:

DSTAMP 字段返回 24-SEP-14 08.55.33.997545000,不带任何格式。

显然预期的输出是

24/09/2014 & 08:55:34

【问题讨论】:

【参考方案1】:

看来it.DSTAMP是一个TIMESTAMP

to_dateto_timestamp 替换为to_char

SELECT to_char(it.DSTAMP, 'DD/MM/YYYY') AS "Date", to_char(it.DSTAMP, 'HH24:MI:SS') AS Time
FROM itable it

【讨论】:

以上是关于Oracle SQL to_date & to_timestamp ORA-01858: 在需要数字的地方发现了一个非数字字符 & ORA-01850: 小时必须在 0 到 23 之间的主要内容,如果未能解决你的问题,请参考以下文章

oracle sql优化to_date和to_char 的使用

oracle用sql 语句如何向表中插入时间?

oracle常用& to_date()怎么转换带am pm的时间格式

oracle todate函数

当结果已被过滤以匹配我的日期格式(Oracle SQL)时,为啥这个 to_date 不起作用

如何在不使用 to_date /to_char 函数的情况下比较 oracle sql 中的日期?