добавление месяцев к дате SQL

Я пытаюсь добавить месяцы к существующей дате в SQL. Новый отображаемый столбец будет иметь столбец последующих действий вместо столбца дней. Я получаю сообщение об ошибке в операторе select. Можете ли вы помочь?

Create table auctions(
item varchar2(50),
datebought date,
datesold date,
days number
);
Insert into auctions values (‘Radio’,’12-MAY-2001’,’21-MAY-2001’,9);
Select item,datebought,datesold,ADD MONTHS(datesold,3)”followup” from auctions;

person Nidhin_toms    schedule 17.11.2012    source источник
comment
techonthenet.com/oracle/index.php, ss64.com/ora/syntax.html   -  person OMG Ponies    schedule 18.11.2012


Ответы (3)


Вы неправильно используете функцию add_months(). Это не два слова, а одно (с подчеркиванием)

add_months(datesold, 1)

обратите внимание на подчеркивание _ между ADD и MONTHS. Это вызов функции, а не оператор.

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

datesold + INTERVAL '1' month

Хотя стоит отметить, что арифметика с интервалами ограничена (если не нарушена), потому что она просто «увеличивает» значение месяца значения даты. Это может привести к неверным датам (например, с января по февраль). Хотя это задокументировано (см. ссылки ниже), я считаю это ошибкой (стандарт SQL требует, чтобы эти операции «арифметически подчинялись естественным правилам, связанным с датами и временем, и давали действительные результаты даты и времени или интервала в соответствии с григорианским календарем< /эм>")

Подробнее см. в руководстве:
http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions011.htm#i76717
http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements001.htm#i48042
< бр/>

Еще одна вещь:

Я пытаюсь добавить месяцы к существующей дате в SQL.

Тогда почему вы используете оператор INSERT? Чтобы изменить данные существующих строк, вы должны использовать UPDATE. Итак, кажется, что вам действительно нужно что-то вроде этого:

update auctions
   set datesold = add_months(datesold, 1)
where item = 'Radio';
person a_horse_with_no_name    schedule 17.11.2012
comment
+1 Но наверное стоит отметить, что add_months и + interval '1' month не всегда работают одинаково. Например, add_months(date '2000-01-31', 1) возвращает 2000-02-29. Но date '2000-01-31' + interval '1' month терпит неудачу с ORA-01839: date not valid for month specified. - person Jon Heller; 18.11.2012
comment
@jonearles: хорошая мысль. Хотя я считаю поведение + interval '1' month' ошибкой, т.к. не работает для 31 января (Oracle пытается просто увеличить значение месяца, что приводит к недействительному 31 февраля). Другие СУБД понимают это правильно. - person a_horse_with_no_name; 18.11.2012
comment
@a_horse_with_no_name написал: ...может привести к неверным датам (например, с января по февраль)... Большое запоздалое спасибо. Это ответило на все. Я не могу поверить, что Оракул позволяет так нарушать интервал. - person Phil Nicholas; 25.12.2014

Ваш SQL имеет типографские кавычки, а не стандартные. Например. не то же самое, что '. Вместо того, чтобы ограничивать строковое значение, эти кавычки становятся частью значения, по крайней мере, для конкретного SQL, который я здесь тестирую.

Если это не решит вашу проблему, попробуйте опубликовать ошибку, которую вы получаете в своем вопросе. Волшебная отладка невозможна.

person Ben Graham    schedule 17.11.2012
comment
SQL> Выберите товар,дату покупки,датыпродажи,ДОБАВИТЬ МЕСЯЦЕВ(датыпродажи,3)отслеживание с аукционов; Выберите товар,дата покупки,дата продажи,ДОБАВИТЬ МЕСЯЦЕВ(датапродажи,3)отслеживание аукционов * ОШИБКА в строке 1: ORA-00936: отсутствует выражение - person Nidhin_toms; 18.11.2012
comment
Вы пропустили запятую после ADD MONTHS, хотя, вероятно, ошибок больше. Пожалуйста, укажите детали ошибки в своем вопросе, а не в комментарии. - person Ben Graham; 18.11.2012

Это можно использовать для добавления месяцев к дате в SQL:

select DATEADD(mm,1,getdate())

Это может быть полезная ссылка.

person Salman    schedule 17.11.2012