Oracle to_date()输出不正确

时间:2011-11-04 11:40:30

标签: sql oracle select toad

必须有一个非常简单的答案,但我无法在任何地方找到它。

我有以下内容是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

有趣的是,它们是连字符( - )而不是斜杠(/)。

那么这是什么原因以及如何实现我的目标?

3 个答案:

答案 0 :(得分:6)

假设w.end_Dateq._renewal_date是实际日期,您需要to_char个,而不是to_date。目前我会说你看到NLS设置指定格式的日期。 (如果它们不是日期,您将它们转换为日期,但仍然让您的NLS设置选择您在其中查看的格式)

答案 1 :(得分:1)

正如您在日期前所述,它将Oracle内部存储的值作为日期。它会使用您NLS_DATE设置值显示给您,我假设默认设置为DD-MON-YY

您可以查看

SELECT *
  FROM v$parameter
 WHERE name = 'nls_date_format';

您需要更改NLS_DATE_FORMAT设置(对于您的会话或数据库)或TO_CHAR输出为您想要查看的格式。

答案 2 :(得分:0)

to_date将字符串转换为日期。您拥有的代码是以'DD / MM / YYYY'格式获取字符串(q._renewal_date)并将其转换为日期。您看到的是日期字段的默认呈现。

根据q._renewal_date的类型,您可能需要使用不同的转换/格式化函数。