как получить разницу в месяце в 2 столбца со значением даты в SQL разработчика? - PullRequest
0 голосов
/ 27 декабря 2018

Я хочу получить полную месячную разницу между DT_1 и DT_2.Я пробовал datediff, datepart и month, но это не сработало ... Я использую SQL-разработчик, и он показывает:

ORA-00904: "DATEPART":неверный идентификатор 00904. 00000 - «% s: неверный идентификатор»

Данные:

+---------+-----------+---------------+
|   ID    | DT_1      | DT_2          |
+---------+-----------+---------------+
| C111111 | 2018/1/1  | 2018/1/1      | 
| C111112 | 2017/9/30 | 2018/10/25    | 
| C111113 | 2018/10/1 | 2018/10/31    | 
| C111114 | 2018/10/6 | 2018/12/14    | 
+---------+-----------+---------------+

Ожидаемые результаты:

  • для C111111,разница в месяце должна составлять 0 (1-1)
  • для C111112, разница в месяце должна составлять 13 (22-9)
  • для C111113 месяцаразница должна быть 0 (10-10)
  • для C111114, разница в месяце должна составлять 2 (12-10)

Кто-нибудь может помочь?Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

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

Простой способ сделать это с использованием арифметики:

select t.*,
       ( (extract(year from dt_2) * 12 + extract(month from dt_2)) -
         (extract(year from dt_1) * 12 + extract(month from dt_1))
       ) as month_difference
from t;

В качестве альтернативы, вы можете использовать trunc() с months_between():

select t.*,
       months_between(trunc(dt_2, 'MON'), trunc(dt_1, 'MON'))
0 голосов
/ 27 декабря 2018

Возможно, вам понадобится узнать, являются ли DT_1 и DT_2 типом даты, а затем использовать функцию MONTHS_BETWEEN, чтобы получить разницу дат в месяцах между двумя датами.Как ниже:

SELECT MONTHS_BETWEEN  (TO_DATE('2018/1/1','YYYY/MM/DD'),  TO_DATE('2018/1/1','YYYY/MM/DD') ) "Months"  FROM DUAL;

ИЛИ,

SELECT MONTHS_BETWEEN  (TO_DATE(DT_1,'YYYY/MM/DD'),  TO_DATE(DT_2,'YYYY/MM/DD') ) "Months"  FROM TableName;
...