【问题标题】:SQL Server stored procedure with Date variable带有日期变量的 SQL Server 存储过程
【发布时间】:2014-09-04 12:02:35
【问题描述】:

我需要帮助来纠正以下存储过程。我只想输入日期为07-14-2014 而不必输入整个datetime 字符串,仍然可以从07-14-2014 获取所有数据。

目前我必须输入2014-07-14 00:00:00.000

ALTER PROCEDURE [dbo].[spWWGetScrap]
    @Start_Date datetime = NULL
    ,@End_Date datetime = NULL
AS
  -- Get the latest dataset.
  SELECT        
      Casting_Part_Number, Scrap_Code, 
      Casting_Code, Pattern, Quantity
  FROM            
      CleaningRoom_Scrap
  WHERE        
      DateStamp BETWEEN @Start_Date AND @End_Date

【问题讨论】:

  • 你好...不要忘记还包含一个带有 SQL Server 版本(年份)的标签。
  • 另外,为什么你“必须”输入时间?您如何看到忽略它的问题?我问是因为如果省略它通常会默认为 00:00:00 ......所以你会得到你想要的。 (我猜你对“介于”有疑问,最好具体说明一下)
  • 另外,如果您不需要时间组件,那么为什么不使用date 类型作为@Start_Date 和@End_Date。
  • 我需要时间来做一些报告,但不是全部。当我休假并说我只想今天(2014 年 7 月 14 日)时,它不会返回任何东西。如果我输入(07-14-2014 00:00:00.000 和 07-14-2014 23:59:59.000)的填充时间,它将返回今天的数据。
  • 或许你只需要了解“What do BETWEEN and the devil have in common?”这个问题的答案。

标签: sql-server tsql datetime stored-procedures


【解决方案1】:

要包含一个日期期间的所有事件,您需要从 00:00:00.000 开始日期开始并在第二天 00:00:00.000 结束日期之前完成。这可以很容易地将结束日期添加 1 天。

ALTER PROCEDURE [dbo].[spWWGetScrap]
    @Start_Date datetime = NULL
    ,@End_Date datetime = NULL
AS
  -- Get the latest dataset.
  SELECT        
      Casting_Part_Number, Scrap_Code, 
      Casting_Code, Pattern, Quantity
  FROM            
      CleaningRoom_Scrap
  WHERE        
       (DateStamp >= @Start_Date) AND (DateStamp < dateadd(d,1,@End_Date))

请注意,我不包括 = 。这仅在您省略结束日期中的时间部分时有效。

【讨论】:

  • 这正是我所需要的。非常感谢大家今天的帮助。
猜你喜欢
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多