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_Dateq._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的时间格式

oracle中的to_date函数

oracle中to_date详细用法示例(oracle日期格式转换)

Impala 是不是有类似 to_date (oracle) 的功能?