Oracle SQL日期间隔

问题描述

请帮我B是对的吗? 或C

解决方法

您最好的选择是尝试。

SQL> alter session set nls_date_format = 'dd_mm_yyyy';

Session altered.

SQL> -- A
SQL> select to_char(to_date('29-10-2019') + interval '2' month + interval '6' day
  2  + interval '120' second,'dd-mon-yyyy') as datum from dual;

DATUM
-----------
04-jan-2020

SQL> -- B
SQL> select to_char(to_date('29-10-2019') + interval '3' month + interval '7' day
  2  + interval '120' second,'dd-mon-yyyy') as datum from dual;

DATUM
-----------
05-feb-2020

SQL> -- C
SQL> select to_char(to_date('29-10-2019') + interval '2' month + interval '4' day
  2  + interval '120' second,'dd-mon-yyyy') as datum from dual;

DATUM
-----------
02-jan-2020

SQL> -- D
SQL> select to_char(to_date('29-10-2019') + interval '2' month + interval '6' day
  2  + interval '120' second,'dd-mon-yyyy') as datum from dual;

DATUM
-----------
04-jan-2020

SQL> -- E
SQL> select to_char(to_date('29-10-2019') + interval '2' month + interval '5' day
  2  + interval '120' second,'dd-mon-yyyy') as datum from dual;

DATUM
-----------
03-jan-2020

SQL>

所以-是的,C是正确的。

,

所有查询在语法上均无效,并且会引发如下异常:

  • 他们有反引号,而不是单引号;
  • INTEVAL '120 SECOND中应该有第二个引号,并且INTERVAL拼写错误;和
  • 围绕TO_CHAR函数的格式模型,引号丢失了,前面的逗号也分开了。

如果忽略(许多)语法错误,那么您将从2019-10-29开始并想进入2020-01-02;相差2个月(这将使您进入2019-12-29)和4天。由于NLS的设置,秒数没有显示,因为它们没有显示。这将给出答案C