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查询以获取从当前月份开始的月份列表的主要内容,如果未能解决你的问题,请参考以下文章

月份和年份的 SQL 查询

sql查询指定月份之前的几个月

如何使用查询获取两个给定日期之间的月份列表?

如何获取当前月份的开始日期和结束日期

sql如何按日期中的月份查询

SQL Select 查询以选择日期之间的数据,其中从日期月份高于日期月份和年份差异>1