Oracle next_day 函数 returns 日期错误
Oracle next_day function returns wrong date
我是运行 Oracle Database 11g 快捷版。当我发出:
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;
两者都 return '04-06-15 00:00:00'.
有人可以解释为什么它以这种方式工作吗?
谢谢!
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
应该做你想做的而且您已经在使用它了。
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>
我是运行 Oracle Database 11g 快捷版。当我发出:
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;
两者都 return '04-06-15 00:00:00'.
有人可以解释为什么它以这种方式工作吗?
谢谢!
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
应该做你想做的而且您已经在使用它了。
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>