将日期添加到日期SQL

时间:2012-11-17 22:07:36

标签: 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;

3 个答案:

答案 0 :(得分:7)

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

add_months(datesold, 1)

请注意_ADD之间的下划线MONTHS。它的函数调用不是操作符。

或者你可以使用:

datesold + INTERVAL '1' month

虽然值得注意的是,间隔的算术是有限的(如果没有破坏),因为它只是“增加”日期值的月份值。这可能导致无效日期(例如从1月到2月)。虽然这是记录在案的行为(见下面的链接),但我认为这是一个错误(SQL标准要求这些操作“算术遵守与日期和时间相关的自然规则,并根据公历生成有效日期时间或间隔结果< / EM>“)

有关详细信息,请参阅手册:
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';

答案 1 :(得分:0)

您的SQL有印刷引号,而不是标准引号。例如。 '不同。这些引号不是分隔字符串值,而是 值的一部分,至少对于我在这里测试的特定SQL而言。

如果这不能解决您的问题,请尝试发布您在问题中收到的错误。无法进行神奇的调试。

答案 2 :(得分:0)

这可用于在SQL中将日期添加到日期:

select DATEADD(mm,1,getdate())

这可能是useful link