【问题标题】:Oracle to_date() incorrect outputOracle to_date() 输出错误
【发布时间】: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

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

那么这是什么原因,我该如何实现我想要的呢?

【问题讨论】:

    标签: sql oracle select toad


    【解决方案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 的类型,您可能需要使用不同的转换/格式化函数。

        【讨论】:

          猜你喜欢
          • 2016-04-17
          • 1970-01-01
          • 2019-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多