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_date
和to_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常用& to_date()怎么转换带am pm的时间格式