2014-10-16 68 views
0

我想在名爲generic的表中名爲UPDATE_TIME的列中選擇時間戳少於一週前的所有行。從較早的問題,我開發了這個腳本:Oracle SQL選擇時間戳不超過1周前的行嗎?

select * from generic where 'UPDATE_TIME' < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 WEEK)) 

但是,這是給我這個錯誤:

ORA-00907: missing right parenthesis 
00907. 00000 - "missing right parenthesis" 
*Cause:  
*Action: 
Error at Line: 1 Column: 92 

我在做什麼錯?

回答

2
select * 
from generic 
where timestamp '1970-01-01 00:00:00' + numtodsinterval(update_time,'SECOND') > current_timestamp - interval '7' day 
  • 有一個在Oracle中沒有unix_timestamp()。這需要使用來完成:

    timestamp '1970-01-01 00:00:00' + <number of seconds in epoch> 
    

    添加幾秒鐘,他們必須被轉換爲interval類型的數量。這就是

    numtodsinterval(update_time,'SECOND') 
    

  • 沒有在Oracle中沒有date_sub
  • 有在甲骨文
  • 沒有 now()
  • 'UPDATE_TIME'是一個字符串字面量不是列名

然而,如果update_timedatetimestamp列,那麼整個轉換n沒有必要:

select * 
from generic 
where update_time > current_timestamp - interval '7' day 
+0

哦親愛的我,我錯誤地認爲這個問題是在Oracle sql中,當它實際上是mysql!這是否會考慮夏令時?我也需要它在不同的時區是相同的 – 2014-10-16 10:40:17

+0

@EvilWashingMachine:我_think_會工作,但我不是100%確定的。也許'timestamp'1970-01-01 00:00:00''部分需要被轉換爲'具有時區的時間戳'以使其工作。 – 2014-10-16 10:44:08

+0

它需要年齡。我得到了一個不同的查詢,謝謝你的答案! upvoted回答這個問題,並指出我出錯的地方 – 2014-10-16 10:54:24