#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)