Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 Sql查询使用单个日期列创建日期范围_Sql Server 2005 - Fatal编程技术网

Sql server 2005 Sql查询使用单个日期列创建日期范围

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

我有一个表,其中包含一个日期列,比如特殊日期(存储为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'
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还不错?对于一个初学者的问题,我可能会感到抱歉