【问题标题】:How to populate "between dates" given start and end dates如何在给定开始日期和结束日期的情况下填充“日期之间”
【发布时间】:2013-05-08 18:25:31
【问题描述】:

我有一张表格,告诉我一件设备的开始和结束“预订日期”。我想创建并填充一个新表,填写所有“日期之间”以及特定项目的开始和结束日期。新表应包括以下列:

Item Name  conferencename  reserved dates

【问题讨论】:

  • 您的问题是什么?到目前为止,您的查询是什么样的?
  • 到目前为止,我还没有为此创建查询。我的问题是“表格中两个日期之间的日期范围,并使用开始日期、中间日期和结束日期更新表格”
  • 这不是一个问题,那是一串单词放在一起有点像一个句子。您需要清楚地说明问题,展示您为帮助自己所做的工作,然后向我们展示您遇到的问题,以便我们帮助您解决具体问题

标签: sql sql-server


【解决方案1】:

我可能是唯一一个觉得这个问题很有趣的人(只是没有得到完美的解释)。

这是一个SQL Fiddle Demo,它显示了一种使用光标填充日期的方法。我相信您要求的脚本部分如下所示:

CREATE TABLE EquipmentLog 
    ([Item Name] varchar(255),
     conferencename varchar(255),
     [reserved dates] datetime);

DECLARE @Item_Name varchar(255),
        @conferencename varchar(255),
        @start_reserve_date datetime,
        @end_reserve_date datetime,
        @reserve_date datetime

DECLARE cur CURSOR FAST_FORWARD
FOR
SELECT * FROM EquipmentRegister

OPEN cur

FETCH NEXT FROM cur
INTO @Item_Name, @conferencename, @start_reserve_date, @end_reserve_date

WHILE (@@FETCH_STATUS=0)
BEGIN
    SET @reserve_date = @start_reserve_date
    WHILE (@reserve_date <= @end_reserve_date)
    BEGIN
        INSERT INTO EquipmentLog
        SELECT @Item_Name, @conferencename, @reserve_date

        SELECT @reserve_date = DATEADD(day, 1, @reserve_date)
    END

    FETCH NEXT FROM cur
    INTO @Item_Name, @conferencename, @start_reserve_date, @end_reserve_date
END

CLOSE cur
DEALLOCATE cur

【讨论】:

  • 谢谢史蒂夫,我不是真正的开发人员,我只是偶尔写一些查询,也许我在解释我想要的东西方面做得不好。但是,当我在小提琴上检查它时,它似乎确实做了我想要的。谢谢,我会在我的系统中尝试一下。
  • 史蒂夫,在触发器中使用光标是个好主意吗?
  • 您的意思是当行被添加到注册表时,它会在日志表中填充日期?是的,这应该可以工作 - 但请记住,如果可能的话,您可能需要额外的脚本来处理更新和删除。
猜你喜欢
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多