有没有检查连续日期的功能。我在处理以下问题时遇到问题:
我的表有一个datetime
包含以下数据的列:
----------
2015-03-11
2015-03-12
2015-03-13
2015-03-16
给定开始日期为2015-3-11
,结束日期为2015-3-17
。我想要的结果是:
----------
2015-03-11
2015-03-12
2015-03-13
有人可以建议什么吗?
我认为这是“连续日期分组岛”问题的一种变体。可以使用ROW_NUMBER()
:
CREATE TABLE Test(
tDate DATETIME
)
INSERT INTO Test VALUES
('20150311'), ('20150312'), ('20150313'), ('20150316');
DECLARE @startDate DATE = '20150311'
DECLARE @endDate DATE = '20150317'
;WITH Cte AS(
SELECT
*,
RN = DATEADD(DD, - (ROW_NUMBER() OVER(ORDER BY tDATE) - 1), tDate)
FROM Test
WHERE
tDate >= @startDate
AND tDate < DATEADD(DAY, 1, @endDate)
)
SELECT CAST(tDate AS DATE)
FROM CTE
WHERE RN = @startDate
结果
|------------|
| 2015-03-11 |
| 2015-03-12 |
| 2015-03-13 |
这是SQL Server 2005版本:
DECLARE @startDate DATETIME
DECLARE @endDate DATETIME
SET @startDate = '20150311'
SET @endDate = '20150317'
;WITH Cte AS(
SELECT
*,
RN = DATEADD(DD, -(ROW_NUMBER() OVER(ORDER BY tDATE)-1), tDate)
FROM Test
WHERE
tDate >= @startDate
AND tDate < DATEADD(DAY, 1, @endDate)
)
SELECT CONVERT(VARCHAR(10), tDate, 121)
FROM CTE
WHERE RN = @startDate
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句