Mam zapytanie SQL:

DECLARE @StartDate  DATETIME,
    @EndDate    DATETIME;

SELECT   @StartDate = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0)        
    ,@EndDate   = getdate();


SELECT LEFT(CONVERT(varchar, DATEADD(MM, DATEDIFF(MM, 0, DATEADD(MONTH, x.number, @StartDate)), 0),112),6) AS MonthName --LEFT(CONVERT(varchar, DATEADD(MONTH, x.number, @StartDate)), 0),112),6)
FROM    master.dbo.spt_values x
WHERE   x.type = 'P'        
AND     x.number <= DATEDIFF(MONTH, @StartDate, @EndDate)`

Muszę to zrobić w tym formacie:

201901, 201902.

Dzięki

1
Patrik Novotný 26 luty 2019, 16:40

2 odpowiedzi

Najlepsza odpowiedź

Dla starszej wersji serwera SQL możesz spróbować podążać za nią.

DECLARE @StartDate  DATETIME,
    @EndDate    DATETIME;

SELECT   @StartDate = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0)        
    ,@EndDate   = getdate();

;with cte as
(
SELECT LEFT(CONVERT(varchar, DATEADD(MM, DATEDIFF(MM, 0, DATEADD(MONTH, x.number, @StartDate)), 0),112),6) AS MonthName 
FROM    master.dbo.spt_values x
WHERE   x.type = 'P'        
AND     x.number <= DATEDIFF(MONTH, @StartDate, @EndDate)
)

SELECT  DISTINCT 
            STUFF ((
                SELECT ', ' + [MonthName]
                FROM 
                cte
                ORDER BY [MonthName]
                FOR XML PATH('')
                ),1,2,'' )
            AS [MonthName]

Dla SQL Server 2017+ możesz użyć STRING_AGG jak poniżej.

select STRING_AGG (MonthName, ',') as MonthName
FROM CTE
0
PSK 26 luty 2019, 13:56

Spróbuj tego poniżej zapytania:

Wybierz (Stuff ((wybierz "," Cast (Eid jako Varchar (10)) od pracownika na ścieżkę XML ('')), 1,2, ''))

0
siva-user3060012 26 luty 2019, 13:51