2016-04-06 14 views
-6

Bir ay içinde başlayan ayın listesini ay için listelemek için SQL sorgusuna ihtiyacım var. Bu sorguyu denedim, ancak Listede ilk olarak Geçerli ay'a ihtiyacım var. SQL sorgusu ayların listesini almak için ay ayından başlayarak

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 

size bu sorguda

+1

Lütfen size denedi sorguyu göndermek. –

+1

Ve lütfen veritabanını belirtin. – Harry

+3

Hangi RDMBS kullanıyorsunuz? – MusicLovingIndianGirl

cevap

0

göz ederiz. o

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 
+0

Herhangi bir argümanı geçemiyorum, – Sara

+0

gereksinimi karşılamayacağından, ancak @month dinamik yapabilirsiniz .. – Bharat

+0

güncellenmiş kodu görün. – Bharat

0

Bu olabilir kolayca özyinelemeli CTE kullanarak çözmüş, sadece gösteri için var:

;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