0

私は宿題の問題に取り組んでいます。データベース SQL プログラミング用。

Q4. 今日の日付 (現在の日付) を使用して、書店で販売されている各本の年齢 (月単位) を特定します。月全体が表示されていることを確認してください。月の一部を無視します。本のタイトル、発行日、現在の日付、および年齢を表示します。age 列には列エイリアスを使用します。

必要なクエリ結果:

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 です。

私は問題を解決しましたが、公開日のためにこの丸められた時間を取得するのに問題があります. 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))

また、丸められた pubdate のコーディングに何か問題がありTO_CHAR(ROUND(pubdate), 'DD-MON-YY HH24:MM:SS') AS pubdateます。

年齢の計算の間違いを修正する方法と、そこにあるような正しい丸められた日付を取得する方法を考えているだけです。

この質問は、Murach の Oracle SQL の Ch17 How to work with timestamps and intervals に関するものです。

4

1 に答える 1

2

関数を使用して、2つの日付の間の月数を取得できmonths_betweenます。次に、それを最も近い1か月に切り捨てることができます。

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;
于 2012-12-03T11:11:37.463 に答える