SQL查询以获取从当前月份开始的月份列表
Posted
技术标签:
【中文标题】SQL查询以获取从当前月份开始的月份列表【英文标题】:SQL query to get list of months start from current month 【发布时间】:2016-04-06 05:21:21 【问题描述】:我需要一个SQL
查询来列出从当前月份开始的一年中的月份。
我已经尝试过这个查询,但我需要将当前月份作为列表中的第一个。
DECLARE @year int
SET @year = 2016
SELECT number AS a,
DATENAME(MONTH, cast(@year*100+number AS varchar) + '01') AS b
FROM master.dbo.spt_values
WHERE TYPE = 'P'
AND number BETWEEN 1 AND 12
谢谢
【问题讨论】:
请发布您尝试过的查询。 请指定数据库。 您使用的是哪个 RDMBS? 欢迎来到***。请阅读How to Ask。 SQL ORDER BY months starting with this month的可能重复 【参考方案1】:看看这个查询。 只是为了演示,
DECLARE @YEAR INT
SET @YEAR = (SELECT YEAR(GETDATE()))
DECLARE @MONTH INT
SET @MONTH = (SELECT MONTH(GETDATE()))
DECLARE @DT TABLE(ID INT, MONTHNAME NVARCHAR(20))
INSERT INTO @DT SELECT NUMBER AS ID,
DATENAME(MONTH, CAST(@YEAR*100+NUMBER AS VARCHAR) + '01') AS MONTHNAME
FROM MASTER.DBO.SPT_VALUES
WHERE TYPE = 'P' AND
NUMBER BETWEEN @MONTH AND 12
INSERT INTO @DT SELECT NUMBER AS ID,
DATENAME(MONTH, CAST(@YEAR*100+NUMBER AS VARCHAR) + '01') AS MONTHNAME
FROM MASTER.DBO.SPT_VALUES
WHERE TYPE = 'P' AND
NUMBER BETWEEN 1 AND @MONTH -1
SELECT * FROM @DT
【讨论】:
我不能传递任何参数,因为它不符合我的要求 我的要求是有一个月份列表,但列表从当前月份开始。 是的,我按照您的要求执行,运行更新后的代码。如果您仍有任何问题,请回复我。 好的,问题出在哪里?你能更具体地告诉我,以便我可以给出适当的解决方案.. 我需要一个月份列表,列表中的第一个应该是当前月份,也不需要通过年份..【参考方案2】:这可以使用递归 cte 轻松解决:
;WITH CTE AS
(
SELECT GETDATE() As TheDate,
DATENAME(MONTH, GETDATE()) As TheMonth
UNION ALL
SELECT DATEADD(MONTH, 1, TheDate),
DATENAME(MONTH, DATEADD(MONTH, 1, TheDate))
FROM CTE
WHERE YEAR(DATEADD(MONTH, 1, TheDate)) = YEAR(GETDATE())
)
SELECT TheMonth
FROM CTE
【讨论】:
以上是关于SQL查询以获取从当前月份开始的月份列表的主要内容,如果未能解决你的问题,请参考以下文章