Oracle to_date() 输出错误
Posted
技术标签:
【中文标题】Oracle to_date() 输出错误【英文标题】:Oracle to_date() incorrect output 【发布时间】:2011-11-04 11:40:29 【问题描述】:一定有一个很简单的答案,但我在任何地方都找不到。
以下是我的select
声明的一部分:
case when q.renewal_date is not null then
to_date(q._renewal_date, 'DD/MM/YYYY')
else
to_date(w.END_DATE, 'DD/MM/YYYY')
end END_DATE,
根据我能找到的所有文档,MM
应该给出月份的数字,但是我得到的结果如下:
30-SEP-12
26-JUN-11
30-SEP-12
有趣的是,它们是连字符 (-) 而不是斜杠 (/)。
那么这是什么原因,我该如何实现我想要的呢?
【问题讨论】:
【参考方案1】:假设w.end_Date
和q._renewal_date
是实际日期,您希望to_char
他们,而不是to_date
。目前,我会说您正在查看 NLS 设置指定格式的日期。 (如果它们不是日期,您将它们转换为日期,但仍让您的 NLS 设置选择您查看它的格式)
【讨论】:
【参考方案2】:当您在 TO_DATEing 时,Oracle 在内部将其存储为日期的值。它使用您的NLS_DATE
设置值显示给您,我假设默认设置为DD-MON-YY
。
你可以检查
SELECT *
FROM v$parameter
WHERE name = 'nls_date_format';
您需要将NLS_DATE_FORMAT
设置(用于会话或数据库)或TO_CHAR
输出更改为您想要查看的格式。
【讨论】:
【参考方案3】:to_date 将字符串转换为日期。您拥有的代码采用 'DD/MM/YYYY' 格式的字符串 (q._renewal_date) 并将其转换为日期。您看到的是日期字段的默认呈现。
根据 q._renewal_date 的类型,您可能需要使用不同的转换/格式化函数。
【讨论】:
以上是关于Oracle to_date() 输出错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 oracle to_date 返回此错误 ORA-01861: literal does not match format string
oracle,插入数据,to_date('13-JUL-87')-51为啥提示“无效的月份”?
oracle常用& to_date()怎么转换带am pm的时间格式