【问题标题】:Can I compare entries of a same table based on their different dates?我可以根据不同日期比较同一张表的条目吗?
【发布时间】:2014-06-27 11:09:06
【问题描述】:

我正在创建一个接收两个日期作为参数的过程。

该过程适用于具有以下列的表格(我会放一张实际表格的图片,但我还没有足够的声誉):

日期 displayName 标签容量

表中包含的数据已经收集了几年,从某一天开始,displayName 列引用了 Vmware 的名称。因此,有可能开始日期只有 3 个条目,而结束日期有 5 个(反映 Vmwares 是在这两者之间创建的)。我想做的如下。给定开始日期和结束日期,我希望能够仅选择在两个日期之间创建(或添加)的 displayName(以及它们的标签和容量)。我有的是

CREATE PROCEDURE afficherCreationLuns @start Date, @end Date
AS
BEGIN
SELECT dateCollecte, DisplayName, label, capacity
FROM Vsp
WHERE dateCollecte = @end AND displayName NOT IN (SELECT displayName
                                                    FROM Vsp
                                                    WHERE dateCollecte = @start)
END

这仅适用于开始日期与创建 Vmware 的确切日期相同的情况(因此将 displayName 添加到条目中)。如果您在此之前选择一个日期,则不会出现任何内容。

我也试过 WHERE dateCollecte >= @start AND dateCollecte

但无论选择的日期如何,这都不起作用。

我也尝试过这样定义日期

@start Date = '2014-05-01', @end = '2014-05-02'

但它不会改变任何东西。

现在我不确定是否可以完成,但我也想要以下内容:

  1. 在表格的日期列中显示的不是结束日期(就像我的代码那样),而是创建 Vmware 的日期(因此添加的条目)
  2. 显示已创建的 displayName,即使它已被销毁。即,如果第 10 天我有 3 个条目,则在第 12 天创建一个 Vmware(我现在有 4 个该日期的条目)并销毁第 13 天,如果所选日期是 start = 10th 和 end =,我希望它出现14.

感谢大家的帮助!

附:如果有帮助,这里是表格的结构:

----------------
Columns for: Vsp
----------------
----------DEV_TechnoWin  dbo            Vsp            id             4              int identity   10             4              0              10             0              4              1              NO             56
----------DEV_TechnoWin  dbo            Vsp            dateCollecte   -9             date           10             20             1              -9             2              YES            0
----------DEV_TechnoWin  dbo            Vsp            displayName    -9             nvarchar       250            500            1              -9             500            3              YES            39
----------DEV_TechnoWin  dbo            Vsp            capacityInKB   6              float          15             8              10             1              6              4              YES            109
----------DEV_TechnoWin  dbo            Vsp            consumedCapacityInKB6              float          15             8              10             1              6              5              YES            109
----------DEV_TechnoWin  dbo            Vsp            dpPoolId       4              int            10             4              0              10             1              4              6              YES            38
----------DEV_TechnoWin  dbo            Vsp            label          -9             nvarchar       250            500            1              -9             500            7              YES            39
----------DEV_TechnoWin  dbo            Vsp            tieringPolicy  4              int            10             4              0              10             1              4              8              YES            38
----------DEV_TechnoWin  dbo            Vsp            dpTier0ConsumedCapacityInKB6              float          15             8              10             1              6              9              YES            109
----------DEV_TechnoWin  dbo            Vsp            dpTier1ConsumedCapacityInKB6              float          15             8              10             1              6              10             YES            109
----------DEV_TechnoWin  dbo            Vsp            dpTier2ConsumedCapacityInKB6              float          15             8              10             1              6              11             YES            109
----------DEV_TechnoWin  dbo            Vsp            dateImport     -9             date           10             20             1              -9             12             YES            0

【问题讨论】:

  • 您能在您的系统中添加一些数据示例吗? WHERE dateCollecte >= @start AND dateCollecte < @end 应该有工作

标签: sql-server datetime stored-procedures comparison procedure


【解决方案1】:

在你的情况下尝试使用BETWEEN

CREATE PROCEDURE afficherCreationLuns (@start Date, @end Date)
AS
BEGIN
SELECT dateCollecte, DisplayName, label, capacity
FROM Vsp
WHERE dateCollecte BETWEEN @end AND @start
END

由 msdn 提供

该查询检索预期的行,因为 查询和存储在 RateChangeDate 列中的日期时间值具有 没有指定日期的时间部分。当时间部分 未指定,默认为 12:00 A.M.请注意,一行 包含 12:00 A.M. 之后的时间部分。在 2002-01-05 上不会 被此查询返回,因为它超出了范围。

【讨论】:

  • 我不确定这是问题所在,就像我说的那样,我设法让第一个代码出现了一些东西。
  • 你能把它弄好吗,我可以给你正确的答案
  • 我编辑了答案,但是我尝试过以各种方式定义日期似乎从来没有产生任何影响。如果您有特定的定义方式,请让我尝试一下!
  • 默认 sql server 格式是 YYYY-MM-DD 试试这个执行你的商店 p 看看输出是什么,你能显示你的表条目的日期
  • 也不起作用。因为我不能附上图片(我没有足够的声誉)我不能真正展示我的桌子
猜你喜欢
  • 2019-07-09
  • 2022-01-17
  • 1970-01-01
  • 2020-01-18
  • 2023-03-08
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
相关资源
最近更新 更多