SQL — получение целого числа относительно столбца даты

#sql #oracle #date

#sql #Oracle #Дата

Вопрос:

У меня есть столбец даты с именем «Expiry_Date». Что меня попросили сделать, так это получить целое число на основе месяца относительно текущего, например:

Текущая дата: 7 мая 2016

 MyTable
----------
1) 12th May
2) 31st May
3) 2nd June
4) 11 June
5) 19 June
6) 28th July
7) 1st August
  

Результатом будет:

 1) 1
2) 1
3) 2
4) 2
5) 2
6) 3
7) 4
  

Таким образом, он получает номер месяца относительно текущего для данной даты (или периодов). Это также должно работать в разные годы, поэтому «1 января 2017 года» будет «9» и т.д.

Большое спасибо

Комментарии:

1. Какой тип данных expiry_date ?

2. Он просто указан как «ДАТА» в Sql Developer. Я использую Oracle 11g

3. Звучит как домашнее задание, если нет, кому-то нужно переписать схему, чтобы гарантировать, что столбец содержит даты в виде типа date или datetime, а не в виде строки. Что вы пробовали до сих пор.

4. Домашнее задание — если бы только! Причина, по которой я спрашиваю, заключается в том, что прошло много времени с тех пор, как я в последний раз выполнял какие-либо SQL (университет 9 лет назад). Я предполагаю, что нужно получить дату и каким-то образом вычесть ее из текущей и каким-то образом превратить ее в одно целое значение. Кстати, подумав об этом, я просто смотрю на DATEDIFF и, возможно, указываю параметр только для месяца

5. @RobertMeyer — это хорошее начало. Получите текущую дату, вычтите из даты в таблице и получите общую часть месяцев. Я думаю, что если вы используете функции даты Oracle в Google, вы сможете составить рабочий ответ без особых усилий.

Ответ №1:

Возможно, решает функция MONTHS_BETWEEN .

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions089.htm

Что-то вроде:

 round(months_between(expiry_date, date '2016-05-07')   1)