需要生成包含天数的12个月的列表

时间:2018-04-02 10:07:11

标签: sql sql-server

我需要生成过去12个月的列表,以及每个月的天数,而不使用查找表。我的作业者给出了不使用表的要求,此查询也必须在任何sql server中使用。

我找到了第一列的解决方案,但它不起作用:

WITH R(N) AS ( 
   SELECT 0 
   UNION ALL 
   SELECT N+1 
   FROM R 
   WHERE N < 12 
) 
SELECT 
    LEFT(DATENAME(MONTH,DATEADD(MONTH,-N,GETDATE())),3) AS [month] 
FROM R

此解决方案是否必须有效,请告诉我R(N)是什么意思? 另外如果您认为无法在任何RDBMS上完成,请帮我在mysql中执行此操作吗?

1 个答案:

答案 0 :(得分:1)

这将在sql-server中工作(根据当前标记)。如果您需要oraclemysqlpostgres...,则语法会有所不同。

WITH R(N) AS ( 
   SELECT 0 
   UNION ALL 
   SELECT N+1 
   FROM R 
   WHERE N < 11 
) 
SELECT 
    LEFT(DATENAME(MONTH,DATEADD(MONTH,-N,GETDATE())),3) AS [month],
    DAY(EOMONTH(DATEADD(MONTH,-N,GETDATE()))) AS [days] 
FROM R

修改

说实话,为任何 RDBMS搞清楚这几乎是在公园散步,但我不想破坏你的乐趣。但是我添加了一个适用于mysql的版本。

SELECT MONTHNAME(DATE_SUB(CURDATE(), INTERVAL R.mth MONTH)) AS Month,
       DAY(LAST_DAY(DATE_SUB(CURDATE(), INTERVAL R.mth MONTH))) AS Days
FROM 
    (SELECT 1 AS mth 
     UNION SELECT 2 
     UNION SELECT 3 
     UNION SELECT 4 
     UNION SELECT 5 
     UNION SELECT 6 
     UNION SELECT 7 
     UNION SELECT 8 
     UNION SELECT 9 
     UNION SELECT 10 
     UNION SELECT 11 
     UNION SELECT 12) AS R