как я добавляю четверть в этом коде, так как мой код показывает дни, месяцы, названия и т.д. - PullRequest
0 голосов
/ 30 января 2019
 SELECT
      n AS Date_ID,
      TO_DATE('31/12/1995','DD/MM/YYYY') + NUMTODSINTERVAL(n,'day') AS Full_Date,
      TO_CHAR(TO_DATE('31/12/1995','DD/MM/YYYY') + NUMTODSINTERVAL(n,'day'),'DD') AS Days,
       TO_CHAR(TO_DATE('31/12/1995','DD/MM/YYYY') + NUMTODSINTERVAL(n,'day'),'MM') AS Month_Num,
       TO_CHAR(TO_DATE('31/12/1995','DD/MM/YYYY') + NUMTODSINTERVAL(n,'day'),'Month') AS Month,
       TO_CHAR(TO_DATE('31/12/1995','DD/MM/YYYY') + NUMTODSINTERVAL(n,'day'),'YYYY') AS Year
  FROM (
   select level n
   from dual
   connect by level <= 7018)
   COMMIT;

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Немного расширив то, что @Ted показал для одной фиксированной даты, чтобы включить квартал в запрос, который вы сделаете:

SELECT
      n AS Date_ID,
      TO_DATE('31/12/1995','DD/MM/YYYY') + NUMTODSINTERVAL(n,'day') AS Full_Date,
      TO_CHAR(TO_DATE('31/12/1995','DD/MM/YYYY') + NUMTODSINTERVAL(n,'day'),'DD') AS Days,
       TO_CHAR(TO_DATE('31/12/1995','DD/MM/YYYY') + NUMTODSINTERVAL(n,'day'),'MM') AS Month_Num,
       TO_CHAR(TO_DATE('31/12/1995','DD/MM/YYYY') + NUMTODSINTERVAL(n,'day'),'Month') AS Month,
       TO_CHAR(TO_DATE('31/12/1995','DD/MM/YYYY') + NUMTODSINTERVAL(n,'day'),'YYYY') AS Year,
       TO_CHAR(TO_DATE('31/12/1995','DD/MM/YYYY') + NUMTODSINTERVAL(n,'day'),'Q') AS Quarter
  FROM (
   select level n
   from dual
   connect by level <= 7018);

COMMIT в вашем оригинале действует как таблицапсевдоним для встроенного представления, и поскольку он не упоминается и имеет запутанное имя, я удалил его.

Вы можете упростить задачу, выполнив манипуляцию с датой один раз внутри этого встроенного представления:

select date_id,
  full_date as full_date,
  to_char(full_date, 'DD') as days,
  to_char(full_date, 'MM') as month_num,
  to_char(full_date, 'Month') as month,
  to_char(full_date, 'YYYY') as year,
  to_char(full_date, 'Q') as quarter
from (
  select level as date_id, date '1995-12-31' + level as full_date
  from dual
  connect by level <= 7018
);

db <> fiddle demo

Вы можете на самом деле хотеть квартал (и, возможно, год и даже день) в виде чисел, а не строк;в этом случае просто оберните их в вызов to_number().

Вы также должны знать, что использование элемента формата Month дает название месяца на текущем языке сеанса, так что кто-то еще запускает его с другим NLSНастройки будут видеть разные названия месяцев.Если вы всегда хотите, чтобы они были на определенном языке, вы можете указать это как часть вызова to_char().

db <> fiddle demo с фиксированным языком и числовой четвертью.

0 голосов
/ 30 января 2019

Используйте ниже

SELECT TO_CHAR(TO_DATE('12/31/1995', 'MM/DD/YYYY'), 'Q') AS MY_QTR
FROM DUAL 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...