【问题标题】:SQL Server Filtering by DateTime column, when TIME portion is provided sometimesSQL Server 按日期时间列过滤,有时提供时间部分
【发布时间】:2015-02-25 17:02:14
【问题描述】:

在 SSRS 报告中,用户根据开始日期和结束日期进行搜索。

正如我最近发现的那样,挑战在于,他有时(并非总是)在搜索时提供时间组件。

目前,过滤器是这样完成的:

if @pEndDate is null  
  SET @pEndDate = getdate()  
SET @PEndDate = DateAdd(dd,1,@PEndDate) 

SELECT ........
FROM .....
WHERE ( Createdon >= @PStartDate AND Createdon < @PEndDate)

当他没有时间搜索时这很好(例如 - @PStartDate = 2/23/2015 和 @PEndDate = 2/24/2015)

我应该如何构造查询以处理他提供的时间部分when? (例如 - @PStartDate = 2/23/2015 15:00 和 @PEndDate = 2/24/2015 15:00)

如果这在其他地方得到了回答,请指出我。谢谢。

【问题讨论】:

    标签: datetime sql-server-2005 where-clause


    【解决方案1】:

    如果您只想匹配日期部分,那么有很多选项。

    1) 参数PEndDatePStartDate可以使用Date类型来取消时间部分

    2) 匹配时可以使用Convert方法只获取参数的日期部分。CONVERT (DATE, @PEndDate) OR CONVERT(varchar,@PEndDate,103)

    3) 使用 DateTime 函数仅从 DateTime 获取日期部分 ATEADD(dd, 0, DATEDIFF(dd, 0, @PEndDate))

    4) 使用 FLOORCAST 函数仅从 DateTime 获取日期部分

    CAST( -- Convert the integer to DATE
     FLOOR(-- Get largest Integer less than or equal to the decimal value
       CAST(GETDATE() AS DECIMAL(12, 5)) -- Convert DATETIME to DECIMAL)   
       AS DATETIME) 'Date Part Only'
    

    5) 使用 DATEPART 和 CONVERT 函数仅从 DateTime 获取日期部分

    CONVERT(VARCHAR(4),DATEPART(YEAR, @GETDATE)) 
           + '/'+ CONVERT(VARCHAR(2),DATEPART(MONTH, @GETDATE)) 
           + '/' + CONVERT(VARCHAR(2),DATEPART(DAY, @GETDATE)) 
             'Date Part Only'
    

    使用适合你的任何一种方法,你会觉得很有趣。


    更新

    正如您提到的,您需要将时间部分与日期一起发送到00:00,以便您可以尝试,

    SELECT CAST( convert(varchar(10),GETDATE(),112) AS DATETIME)
    --This will give you 2015-02-27 00:00:00.000
    SELECT DATEADD(ms,-3, DATEADD(day, DATEDIFF(day,0,GETDATE())+1,0))
    --This will give you end of days time 2015-02-27 23:59:59.997
    SELECT CONVERT(nvarchar,getdate(),103) + ' 12:59:59 PM'
    --This will give you custom time 27/02/2015 12:59:59 PM
    

    【讨论】:

    • 谢谢。但是我想在他提供时将时间部分包括在过滤中。当他不提供时间部分时,我想使用 date1 00:00:00 和 date2 12:59:59
    猜你喜欢
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    相关资源
    最近更新 更多