当我在PL / SQL Developer中执行它时:
SELECT to_date('29/03/17 14:05','DD/MM/RR HH24:MI') FROM dual;
这是我得到的:
3/29/2017 2:05:00 PM
这怎么可能?我使用的是HH24
,但似乎正在使用它HH
。日期和月份也不是我输入的格式。
答案 0 :(得分:2)
使用to_date
方法执行的操作是将字符串解析为日期对象。如果您希望将日期对象输出为具有不同格式的字符串,则应使用to_char
方法。
示例:
SELECT to_char(
to_date('29/03/17 14:05','DD/MM/RR HH24:MI'),
'DD/MM/RR HH24:MI'
) FROM dual;
答案 1 :(得分:2)
好的,概念性的练习即将来临
这些日期中的哪一个代表2017年1月1日?
01/01/2017
2017-01-01
01-JAN-2017
是的,所有人都是对的。 date数据类型不是格式,它存储日期的值,而不是它的显示方式。
如果使用Oracle,请调整您的NLS_DATE_FORMAT以符合您的期望,但同样,这只是系统显示日期的方式,而不是它如何存储日期。
答案 2 :(得分:1)
(N.B。这个答案更多是为了让其他答案更加清晰,但评论的时间太长了。)
Oracle以自己的特定格式存储DATE(和TIMESTAMP等)。我们人类以各种不同的格式表示日期,我们处理字符串。在没有上下文的情况下,即使我们人类也会对日期字符串代表的内容感到困惑03/09/2017
- 是2017年9月3日还是2017年3月9日?
因此,当您将日期传递给Oracle时,您需要通过传入一个字符串并告诉Oracle该字符串的日期格式是什么来将其转换为Oracle的日期格式。这可以使用to_date()
或DATE
文字(始终为yyyy-mm-dd
格式)来完成。
相反,当您想要阅读存储在Oracle的DATE数据类型中的内容时,您需要告诉Oracle您希望如何显示它,您可以使用to_char()
来执行此操作使用适当的格式掩码。
如果您无法显式转换字符串到日期或日期到字符串,则Oracle使用NLS_DATE_FORMAT中指定的格式来决定如何进行转换。
在您的情况下,您没有指定希望如何显示日期,因此Oracle必须使用to_char()
以及NLS_DATE_FORMAT中包含的格式才能将日期显示为字符串,并且显然与您在as。中传递日期字符串的格式不同。