我正在运行Oracle Database 11g Express Edition。当我发出:
select next_day('04-JUN-15', 'Friday') from dual;
我得到了正确的结果,即' 05-JUN-15' 但是当我发布时:
select next_day(DATE '15-06-04', 'Friday') from dual;
我得到了非常奇怪的结果,这是' 07-JUN-15' 与此同时,两个日期对我来说都是一样的:
select to_char(DATE '15-06-04', 'DD-MM-RR HH24:MI:SS'),
to_char(to_date('04-JUN-15'), 'DD-MM-RR HH24:MI:SS')
from dual;
返回' 04-06-15 00:00:00'。
有人能解释为什么它以这种方式起作用吗?
谢谢!
答案 0 :(得分:3)
next_day(DATE '15 -06-04','Friday')
你刚刚重新发明了 Y2K 错误。年份应始终为 YYYY 格式,完整的4位数字。或者,使用 RR 格式以及 TO_DATE 。您需要注意的RR格式有一些规则。
ANSI日期文字不包含任何时间部分,必须以此格式指定('YYYY-MM-DD')。
进行此更正,您将得到正确的结果:
ANSI日期文字
SQL> SELECT next_day(DATE '2015-06-04', 'Friday') FROM dual;
NEXT_DAY(
---------
05-JUN-15
SQL>
TO_DATE RR格式
SQL> SELECT next_day(TO_DATE('15-06-04', 'RR-MM-DD'), 'Friday') FROM dual;
NEXT_DAY(
---------
05-JUN-15
SQL>
答案 1 :(得分:1)
select next_day(DATE '15-06-04', 'Friday') from dual
=> “June,07 0015 00:00:00”
这看起来像15年(即2000年前)!可能不是你想要的。
select DATE '15-06-04' from dual
=> “June,04 0015 00:00:00”
这是以YY-MM-DD读取你的日期,年份是0015.我不确定你为什么要使用DATE
来投射字符串,to_date
应该做你想要的和你正在使用它。