我已插入Oracle的表中。我没有PLSQL的实现是:
SELECT to_date('1900-01-01','YYYY-MM-DD') + (rownum - 1) AS DT_CAL,
rownum AS NUM_JOUR
FROM dual
CONNECT BY to_date('1900-01-01','YYYY-MM-DD') + (rownum - 1) <=
to_date('2000-12-31','YYYY-MM-DD')
结果是:05/28/1900
,而不是1900-05-28
。你能帮我理解问题是什么吗?
答案 0 :(得分:1)
to_date()接受您的字符串参数,将其与您在第二个参数中提供的格式相匹配,并从中构造日期字段。日期字段不是使用您在第二个参数中提供的格式 - 实际上它将使用一些完全没有格式的内部数据表示来存储(很可能是一个数字)。
要在日期字段的结果中显示格式,您可以:
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD';
语句)或to_char(..., 'YYYY-MM-DD')
将日期重新转换为以您希望的方式格式化的字符串。使用select中的当前列定义替换...
的位置。方法#1已经发生,因为已经有NLS_DATE_FORMAT设置生成当前格式,但它有一个你不想要的格式,所以如果你能控制它并在那里改变它,你可以这样做。如果你不能和你必须采用一致的其他方式,那么#2就可以了。
答案 1 :(得分:1)
DATE
数据类型没有格式; Oracle将其存储为7- or 8-bytes,直到将其传递给客户端程序(即SQL / Plus,SQL Developer,Toad,Java,Python等),并且客户端程序根据任何规则对其进行格式化是的,日期有格式。
如果您使用的是SQL / Plus或SQL Developer,那么它将使用NLS_DATE_FORMAT
会话参数来格式化日期。 You can change this使用:
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
(请注意,这只会更改当前会话中的格式,并且不会为任何其他会话/用户更改格式。)
如果您想以特定格式指定日期,则需要convert it to a string。