我有一個包含一個日期列的表說特殊日期(存儲爲YYYYMMDD)SQL查詢創建的日期範圍與單個日期列
如何創建行的小部分中的日期範圍?
實施例表包含01-JAN-2010,01-FEB-2010,01-MAR-2010
我需要
01-jan-2010 - 01-feb-2010
01-feb-2010 - 01-mar-2010
.... 具有以下值的日期列.. ..
請幫忙。
我有一個包含一個日期列的表說特殊日期(存儲爲YYYYMMDD)SQL查詢創建的日期範圍與單個日期列
如何創建行的小部分中的日期範圍?
實施例表包含01-JAN-2010,01-FEB-2010,01-MAR-2010
我需要
01-jan-2010 - 01-feb-2010
01-feb-2010 - 01-mar-2010
.... 具有以下值的日期列.. ..
請幫忙。
您可以通過使用
SELECT s.DateVal StartDate,
MIN(e.DateVal) EndDate
FROM @Table s LEFT JOIN
@Table e ON s.DateVal < e.DateVal
GROUP BY s.DateVal
HAVING MIN(e.DateVal) IS NOT NULL
嘗試像
DECLARE @Table TABLE(
DateVal DATETIME
)
INSERT INTO @Table SELECT '01 Jan 2010'
INSERT INTO @Table SELECT '01 Feb 2010'
INSERT INTO @Table SELECT '01 Mar 2010'
;WITH DateVals AS (
SELECT *,
ROW_NUMBER() OVER(ORDER BY DateVal) RowID
FROM @Table
)
SELECT s.DateVal StartDate,
e.DateVal EndDate
FROM DateVals s INNER JOIN
DateVals e ON s.RowID + 1 = e.RowID
輸出
StartDate EndDate
2010-01-01 00:00:00.000 2010-02-01 00:00:00.000
2010-02-01 00:00:00.000 2010-03-01 00:00:00.000
可以避開CTE但我不明白爲什麼你想這樣做。
我不知道我按照你想要的。你是說在你的示例表中有三個日期,並且你想要一個select語句返回四個,'20100201'重複一次? – 2010-11-18 08:13:12
我認爲這個想法是,輸出顯示一個特殊的日期範圍,其中結束日期是下一個特殊的開始日期。你應該考慮有兩列開始日期,結束日期,因爲它會使生活變得更簡單和更具可擴展性......如果你有兩件特別的東西,那麼會發生什麼? – Rob 2010-11-18 08:18:11