我可以根据不同的日期比较同一个表的条目吗?

时间:2014-06-27 11:09:07

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

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

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

日期显示名称标签容量

表中包含的数据已经收集了几年,从一天开始,displayName列引用了Vmware的名称。因此,开始日期可能只有3个条目,结束日期有5个(反映在其间创建了Vmware)。我想做的如下。给定开始日期和结束日期,我希望能够仅选择在两个日期之间创建(或添加,如果愿意)的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< @end

但无论选择的日期如何,这都没有用。

我也尝试过像这样定义日期

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

但它不会改变任何东西。

现在我不确定是否可以这样做,但我也想要以下内容:

  1. 在表的日期列中显示结束日期(就像我的代码那样),但是创建Vmware的日期(以及添加的条目)
  2. 显示已创建的displayName,即使它已被销毁。即如果第10个我有3个条目,那么Vmware创建了第12个(我现在有4个条目用于此日期)并且销毁了第13个,如果所选日期是start = 10th和end =我希望它出现14。
  3. 感谢帮助人员!

    P.S。如果有帮助,这是表格的结构:

    ----------------
    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
    

1 个答案:

答案 0 :(得分:0)

尝试在您的案例中使用BETWEEN

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

BY msdn

  

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