2012-12-03 19 views
0

我正在處理作業問題。對於數據庫SQL編程。Oracle SQL查詢涉及四個月的時間轉換和日期間隔計算

Q4。使用今天的日期(當前日期),確定書店銷售的每本書的年齡(以月爲單位)。確保顯示整個月份;忽略幾個月的任何部分。顯示書名,出版日期,當前日期和年齡。使用年齡列的列別名。

查詢所需結果:

TITLE       PUBDATE     SYSDATE   AGE      
BODYBUILD IN 10 MINUTES A DAY | 21-JAN-01 00:00:00 | 14-NOV-12 13:16:35 | 141 
REVENGE OF MICKEY    | 14-DEC-01 00:00:00 | 14-NOV-12 13:16:35 | 131 
BUILDING A CAR WITH TOOTHPICKS | 18-MAR-02 00:00:00 | 14-NOV-12 13:16:35 | 127  
DATABASE IMPLEMENTATION  | 04-JUN-99 00:00:00 | 14-NOV-12 13:16:35 | 161 
COOKING WITH MUSHROOMS   | 28-FEB-00 00:00:00 | 14-NOV-12 13:16:35 | 152 
HOLY GRAIL OF ORACLE   | 31-DEC-01 00:00:00 | 14-NOV-12 13:16:35 | 130 

14 rows selected 

這是一個表,書籍和有PUB_DATE,和我使用SYSDATE一段時間間隔計算。 pub_date的數據類型是DATE。

我已經解決了這個問題,但我無法爲pubdate獲取這個舍入時間。它應該用HH:MM:SS四捨五入爲00:00:00,但我的編碼沒有得到正確的結果。這裏是我做了什麼:

SELECT title, TO_CHAR(ROUND(pubdate), 'DD-MON-YY HH24:MM:SS') AS pubdate, 
    TO_CHAR(SYSDATE, 'DD-MON-YY HH24:MM:SS') AS "SYSDATE", 
    ROUND(SYSDATE - TO_DATE(pubdate)) AS age 
FROM books; 

的東西與我的年齡計算,ROUND(SYSDATE - TO_DATE(pubdate)) wroung。

而我的編碼的圓形的出版物,TO_CHAR(ROUND(pubdate), 'DD-MON-YY HH24:MM:SS') AS pubdate有些問題。

只是想知道如何解決我的錯誤計算年齡和如何得到正確的四捨五入的日期,就像它有。

此問題涉及Murach的Oracle SQL,Ch17如何使用時間戳和間隔。

+0

我意識到我的年齡列與NUMTOYMINTERVAL錯誤。這可能不完全正確,但在這裏朝着正確的方向前進。我改變了這個部分的年齡,現在需要讓間隔時間讀取幾個月。 NUMTOYMINTERVAL(SYSDATE - pubdate,'MONTH')AS年齡 – MeachamRob

+0

我修復了pubdate列。現在只是想弄清楚年齡。 ROUND(pubdate)AS pubdate – MeachamRob

回答

2

您可以使用months_between函數獲取兩個日期之間的月數。然後你可以截斷它到最近的整個月份。

SELECT title, 
     TO_CHAR(ROUND(pubdate), 'DD-MON-YY HH24:MM:SS') AS pubdate, 
     TO_CHAR(SYSDATE, 'DD-MON-YY HH24:MM:SS') AS "SYSDATE", 
     trunc(months_between(sysdate, pubdate)) AS age 
    FROM books; 
+0

太棒了,Months_Between。我讓它變得比需要的複雜。謝謝! – MeachamRob