2012-11-17 181 views
1

我想在SQL中將現有日期添加幾個月。顯示的新列將具有後續列而不是日期列。我在選擇語句中得到一個錯誤。你有什麼幫助嗎?將日期添加到日期SQL

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; 
+0

http://www.techonthenet.com/oracle/index.php,http://ss64.com/ora/syntax.html –

+0

什麼錯誤是你越來越? – APC

回答

0

您的SQL有印刷引號,而不是標準引號。例如。 '不一樣。這些引號不是分隔字符串值,而是值的一部分,至少對於我在這裏測試的特定SQL來說。

如果這樣不能解決您的問題,請嘗試發佈您在問題中遇到的錯誤。神奇的調試是不可能的。

+0

SQL>選擇項目,datebought,datesold,ADD MONTHS(datesold,3)來自拍賣的「跟進」; 選擇信息,datebought,datesold,ADD個月(datesold,3)位於第1行,從拍賣 「隨動」 * ERROR: ORA-00936:缺少表達 –

+0

誤差在ADD二個月部 –

+0

你丟失逗號在ADD MONTHS之後,儘管可能會有更多的錯誤。請把你的錯誤細節放在你的問題中,而不是作爲評論。 –

0

這可以用來月份添加到日期在SQL:

select DATEADD(mm,1,getdate()) 

這可能是一個useful link

+3

在Oracle中不起作用。 –

5

您對add_months()函數的使用不正確。這不是兩個詞,它只是一個(帶下劃線)

add_months(datesold, 1) 

ADDMONTHS之間的下劃線_。這是函數調用而不是操作符。

另外,您可以使用:

datesold + INTERVAL '1' month 

雖然這是值得注意的,因爲它的日期值的簡單的「增量」的月份值與間隔的算術是有限的(如果不破)。這可能導致無效日期(例如從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'; 
+3

+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指定的月份無效'失敗。 –

+1

@jonearles:好點。儘管我認爲'+ interval'1'month''的行爲是一個錯誤,在1月31日不起作用(Oracle試圖簡單地增加導致2月31日無效的月份值)。其他數據庫管理系統確實如此。 –

+0

@a_horse_with_no_name寫道:「...可能導致無效的日期(例如從1月到2月)......」許多遲來的感謝。這回答了一切。我不能相信甲骨文允許這個時間間隔被打破。 – PhilNicholas