一个月中所有天数的 SQL 查询

Luc*_*rna 4 sql oracle

我有下表 RENTAL(book_date, copy_id, member_id, title_id, act_ret_date, exp_ret_date)。其中 book_date 显示预订图书的日期。我需要为一个月中的每一天编写一个查询(所以从 1-30 或从 1-29 或从 1-31 取决于月份)它会显示我预订的书籍数量。
我目前知道如何显示表格中租借的天数

select count(book_date), to_char(book_date,'DD')
from rental
group by to_char(book_date,'DD');
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 我如何显示剩余的日子(如果我的数据库中出于某种原因说我在第 20 天或第 19 天或多天没有租借书籍)并将数字 0 放在那里?
  2. 我如何仅显示当月的天数(28,29,30,31 所有这 4 种都可能取决于月份或年份)...我迷路了。这必须仅使用 SQL 查询而不是 pl/SQL 或其他东西来完成。

Jaf*_*ahi 5

以下查询将为您提供当月的所有天数,在您的情况下,您可以替换SYSDATE为日期列并加入此查询以了解给定月份的天数

SELECT DT
FROM(
SELECT TRUNC (last_day(SYSDATE) - ROWNUM) dt
  FROM DUAL CONNECT BY ROWNUM < 32
  )
  where DT >= trunc(sysdate,'mm') 
Run Code Online (Sandbox Code Playgroud)

  • 您缺少 +1 (TRUNC (last_day(SYSDATE) - ROWNUM) + 1)。较短的版本是: SELECT TRUNC (last_day(TO_DATE('201708','YYYYMM')) - ROWNUM + 1) dat FROM DUAL CONNECT BY ROWNUM &lt; to_char (last_day(TO_DATE('201708','YYYYMM')), 'DD')+1; (2认同)