检查日期范围的最快方法

Din*_*rer 1 sql t-sql sql-server sql-server-2005

我在SQLServer 2005中存储事件,事件发生的时间很重要,必须存储在日期库中.在where子句中编写日期范围检查的最快方法是什么,以确保选择当天的所有内容?

目前,当传递@DateStart和@DateEnd时,我将@DateStart设置为午夜,并将@DateEnd设置为午夜之前的最后一个瞬间,作为当天抓住每个可能事件的第一件事.

IF (@DateStart IS NOT NULL)
BEGIN
    SET @DateStart = CAST   (
                                (   CAST (DATEPART (yyyy,@DateStart) AS NVARCHAR(4)) +'/'+
                                    CAST (DATEPART (mm,@DateStart) AS NVARCHAR(2)) +'/'+
                                    CAST (DATEPART (dd,@DateStart) AS NVARCHAR(2)) +' '+
                                    '00:00:00.000'
                                )
                            AS DATETIME)
END

IF (@DateEnd IS NOT NULL)
BEGIN
    SET @DateEnd = CAST (
                            (   CAST (DATEPART (yyyy,@DateEnd) AS NVARCHAR(4)) +'/'+
                                CAST (DATEPART (mm,@DateEnd) AS NVARCHAR(2)) +'/'+
                                CAST (DATEPART (dd,@DateEnd) AS NVARCHAR(2)) +' '+
                                '23:59:59.997'
                            )
                            AS DATETIME
                        )
END
Run Code Online (Sandbox Code Playgroud)

所以where子句很容易阅读:

WHERE(EventDate> = @DateStart AND EventDate <= @DateEnd)

谢谢,

The*_*TXI 7

你总是可以使用替代语法 WHERE EventDate BETWEEN @DateStart AND @DateEnd

  • 请记住,BETWEEN是包容性的. (2认同)