我需要生成过去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中执行此操作吗?
答案 0 :(得分:1)
这将在sql-server
中工作(根据当前标记)。如果您需要oracle
或mysql
或postgres
或...
,则语法会有所不同。
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