Sql server 2005 Sql查询使用单个日期列创建日期范围
我有一个表,其中包含一个日期列,比如特殊日期(存储为yyyymmdd) 如何在一小部分行中创建日期范围 示例表包含一个日期列,其值如下:2010年1月1日、2010年2月1日、2010年3月1日 我需要Sql server 2005 Sql查询使用单个日期列创建日期范围,sql-server-2005,Sql Server 2005,我有一个表,其中包含一个日期列,比如特殊日期(存储为yyyymmdd) 如何在一小部分行中创建日期范围 示例表包含一个日期列,其值如下:2010年1月1日、2010年2月1日、2010年3月1日 我需要 01-jan-2010 - 01-feb-2010 01-feb-2010 - 01-mar-2010 。。。。 请帮忙 您可以尝试以下方法 DECLARE @Table TABLE( DateVal DATETIME ) INSERT INTO @Table SELECT
01-jan-2010 - 01-feb-2010
01-feb-2010 - 01-mar-2010
。。。。
请帮忙 您可以尝试以下方法
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
您可以通过使用
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
选择s.DateVal StartDate,
最小(e.DateVal)结束日期
从@Table s左连接
@表e关于s.DateVal
但我不明白你为什么要这样做。我不确定我是否能满足你的要求。您是说示例表中有三个日期,并且希望select语句返回四个,并重复一次“20100201”吗?我认为这一想法是,输出显示一个特殊的日期范围,其中结束日期是下一个特殊的开始日期。你应该考虑有两列开始日期,结束日期,因为它会使生活变得更简单,更可扩展…如果你同时有两件特价商品会怎么样?我有没有办法避免CTE?CTE还不错?对于一个初学者的问题,我可能会感到抱歉