我正在做家庭作业问题。对于数据库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如何使用时间戳和间隔。
答案 0 :(得分: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;