【问题标题】:SQL Server 2000 (creating all dates given a daterange)SQL Server 2000(创建给定日期范围的所有日期)
【发布时间】:2009-05-08 17:45:36
【问题描述】:

我想知道 SQL Server 2000 中是否有一种方法可以在给定开始和结束日期的情况下创建所有日期。我知道我可以通过 T-SQL 循环来实现这一点。我正在寻找一个非循环的解决方案。同样在 2005 中,您可以使用递归 with 子句。该解决方案还可以使用包含数字的 T 表与表连接。我再次查看 SQL Server 2000 非循环/使用 T 表解决方案。有吗?

【问题讨论】:

    标签: sql sql-server-2000


    【解决方案1】:
    SELECT
         DATEADD(dy, T.number, @start_date)
    FROM
         T
    WHERE
         number BETWEEN 0 AND DATEDIFF(dy, @start_date, @end_date)
    

    日历表也可用于此类查询,您可以向其中添加一些特定日期的信息,例如一天是否为假日、是否算作“工作日”等。

    【讨论】:

      【解决方案2】:

      试试这个:

      创建数字表,只需在您的数据库中执行一次:

      CREATE TABLE Numbers (Number int NOT NULL)
      GO
      ALTER TABLE Numbers ADD CONSTRAINT PK_Numbers PRIMARY KEY CLUSTERED (Number)
      GO
      DECLARE @x int
      set @x=0
      WHILE @X<8000
      BEGIN
          SET @X=@X+1
          INSERT INTO Numbers VALUES (@x)
      END
      

      --运行您的查询:

      DECLARE @StartDate datetime
      DECLARE @EndDate   datetime
      
      set @StartDate='05/03/2009'
      set @EndDate='05/12/2009'
      
      SELECT
          @StartDate+Number-1
          FROM Numbers
          WHERE Number<=DATEDIFF(day, @StartDate, @EndDate)+1
      

      【讨论】:

        猜你喜欢
        • 2011-08-19
        • 2012-02-21
        • 2012-02-26
        • 2017-12-20
        • 1970-01-01
        • 1970-01-01
        • 2020-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多