发布网友 发布时间:2022-05-24 14:05
共1个回答
热心网友 时间:2023-10-16 10:26
可以借助master..spt_values来达到你的要求。
master..spt_values:其中类型P较为特殊,它只是0-2047(与版本有关)之间的数字的简单列表,作为对所有类型之间关系的预测。
语句如下:
DECLARE@SearchYear VARCHAR(4) --查询年份
DECLARE@YearFirstDay VARCHAR(10) --查询年份第一天
DECLARE@YearLastDay VARCHAR(10) --查询年份最后一天
SET @SearchYear = '2022'
SET @YearFirstDay = @SearchYear + '-01-01'
SET @YearLastDay = @SearchYear + '-12-31'
SELECT distinct CONVERT(NVARCHAR(10), DateAdd(MONTH,number,@YearFirstDay),120) AS GroupMouth
FROM master..spt_values a CROSS JOIN Employee b
WHERE a.type = 'P' AND a.number <= DateDiff(MONTH,@YearFirstDay,@YearLastDay)
AND @YearFirstDay BETWEEN b.BeginDate AND ISNULL(b.EndDate,'9999-12-31')
ORDER BY GroupMouth
当然前面的DECLARE定义和SET赋值完全可以转换成你前端处理,后端处理主要是Select一段的逻辑。