我有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)`
我需要使用以下格式:
201901,201902
谢谢
答案 0 :(得分:0)
在下面的查询中尝试以下方法:
选择(Stuff((Select','+ cast(eid as varchar(10))From employee FOR XML PATH('')),1,2,''))
答案 1 :(得分:0)
对于旧版SQL Server,您可以尝试如下操作。
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]
对于SQL Server 2017+,您可以使用STRING_AGG
,如下所示。
select STRING_AGG (MonthName, ',') as MonthName
FROM CTE