将日期添加到日期SQL

Nid*_*oms 1 sql oracle date-arithmetic

我试图在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;
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 7

您对add_months()函数的使用不正确.这不是两个字,它只是一个(带下划线)

add_months(datesold, 1)
Run Code Online (Sandbox Code Playgroud)

注意下划线_之间ADDMONTHS.它的函数调用不是运算符.

或者你可以使用:

datesold + INTERVAL '1' month
Run Code Online (Sandbox Code Playgroud)

虽然值得注意的是,间隔的算术是有限的(如果没有破坏),因为它只是"增加"日期值的月值.这可能导致无效日期(例如从1月到2月).虽然这是记录在案的行为(见下面的链接),但我认为这是一个错误(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';
Run Code Online (Sandbox Code Playgroud)

  • +1但是,值得注意的是,"add_months"和"+ interval"1"月"并不总是以相同的方式工作.例如,`add_months(date'2000-01-31',1)`返回2000-02-29.但是'date'2000-01-31'+ interval'1'month`失败了`ORA-01839:日期对于指定的月份无效. (3认同)