必须有一个非常简单的答案,但我无法在任何地方找到它。
我有以下内容是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
有趣的是,它们是连字符( - )而不是斜杠(/)。
那么这是什么原因以及如何实现我的目标?
答案 0 :(得分:6)
假设w.end_Date
和q._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的类型,您可能需要使用不同的转换/格式化函数。