Как я могу получить месяцы между двумя датами в Oracle SQL - PullRequest
1 голос
/ 29 мая 2020

Мне нужно получить числа месяцев между двумя датами. Например, между этими датами: «03.03.2020 - 06.06.2020» Мне нужно что-то вроде «(03,04,05,06)».

Ответы [ 3 ]

0 голосов
/ 29 мая 2020

Я - SQL серверный программист, и если бы ваш вопрос касался SQL сервера, тогда решение было бы таким:

;WITH cte AS
(
SELECT TOP (DATEDIFF(MONTH, '2020-03-03', '2020-06-06') + 1)
Format(DateAdd(MONTH, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, '2020-03-03'), 'MM', 
'en-US') AS MonthNumber
FROM    sys.all_objects a
)
SELECT '(' + String_Agg(MonthNumber, ', ') + ')' AS Result
FROM cte;

Я проверил приведенное выше, и оно вернет '(03 , 04, 05, 06) 'по желанию. Я сделал все возможное, чтобы переписать указанное выше серверное решение SQL в Oracle SQL, но в настоящий момент я не могу его протестировать. Вы можете попробовать:

WITH cte AS
(
SELECT TOP (MONTHS_BETWEEN (TO_DATE('06/06/2020','DD/MM/YYYY'),
                            TO_DATE('03/03/2020','DD/MM/YYYY') ) + 1)
TO_CHAR(ADD_MONTHS(ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, TO_DATE('03/03/2020','DD/MM/YYYY')), 'MM') 
AS MonthNumber
FROM sys.all_objects a
)
SELECT '(' + LIST_AGG(MonthNumber, ', ') + ')' AS Result
FROM cte;
0 голосов
/ 29 мая 2020

Для Oracle:

SQL> column months format a24
SQL> select banner from v$version where rownum=1;

BANNER
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

SQL> select '(' || listagg(m, ',') || ')' as months
  2  from (
  3   select
  4   extract(month from to_date('03/03/2020')) m1,
  5   extract(month from to_date('06/06/2020')) m2
  6   from dual) mm
  7  inner join (
  8   select level as m
  9   from dual
 10   connect by level <= 12) l
 11  on m >= m1 and m <=m2
 12  ;

MONTHS
------------------------
(3,4,5,6)

SQL> 
0 голосов
/ 29 мая 2020

Для этого попробуйте функцию DATEDIFF:

SELECT RIGHT(CONCAT('00',DATEDIFF(MONTH,'03/06/2020','06/06/2020')) ,2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...