如何比较SQL Server 2005中的两个日期时间字段?

时间:2008-11-09 08:12:05

标签: sql-server-2005 tsql

DECLARE  @p_date DATETIME
SET      @p_date = CONVERT( DATETIME, '14 AUG 2008 10:45:30',?)

SELECT   *
FROM     table1
WHERE    column_datetime = @p_date

我需要比较日期时间,如:

@p_date=14 AUG 2008 10:45:30
column_datetime=14 AUG 2008 10:45:30

我该怎么做?

2 个答案:

答案 0 :(得分:1)

问题不清楚,但看起来你正在尝试进行不返回你期望的行的相等匹配,所以我猜测问题是毫秒是有问题的。这里有几种方法:

  1. 格式化两个值(作为varchar 等)使用CONVERT:昂贵的 CPU,不能使用索引
  2. 使用DATEDIFF / DATEPART进行操作 数学 - 类似,但不是相当 昂贵
  3. 创建一个范围以在
  4. 之间进行搜索

    第三种选择几乎总是最有效的,因为它可以很好地利用索引,并且不需要大量的CPU。

    例如,在上面,由于你的精度是秒*,我会使用:

    DECLARE @end datetime
    SET @end = DATEADD(ss,1,@p_date)
    

    然后添加表格的WHERE:

    WHERE column_datetime >= @p_date AND column_datetime < @end
    

    如果您在column_datetime上有聚簇索引,这将最有效,但如果您在column_datetime上有非聚集索引,则仍然可以正常工作。

    [* =如果@p_date包含毫秒,你需要考虑更多关于是否通过DATEADD修剪这些ms,或做更小的范围等等]

答案 1 :(得分:0)

我不太了解您的问题,但DateDiff可用于比较日期。