检查smalldatetime列等于GetDate() - 忽略时间

时间:2010-08-05 15:26:23

标签: sql tsql

我有一个smalldatetime类型的列,日期

我想运行只检索行的查询:

其中date = convert(smalldatetime,GetDate())

然而,这是永远不会找到匹配,因为它也在比较时间。

即:01-01-2010 12:23:00!= 01-01-2010 12:25:00

如何才能在日期部分找到匹配项?

6 个答案:

答案 0 :(得分:3)

利用索引的一种方法

where date >= dateadd(dd, datediff(dd, 0, getdate()), 0)
and date < dateadd(dd, datediff(dd, 0, getdate()), +1)

另请参阅:How Does Between Work With Dates In SQL Server?

答案 1 :(得分:2)

尝试:

where datediff(dd, yourdate, GetDate()) = 0

答案 2 :(得分:1)

将DateTime值转换为Date值。这将仅存储您要比较的日期部分。

MSSQL中可用的日期和时间数据类型列表为here

答案 3 :(得分:0)

where cast(CONVERT(char(10),DATETIME_FIELD_1,101) as datetime) 
  = cast(CONVERT(char(10),DATETIME_FIELD_2,101) as datetime)

答案 4 :(得分:0)

你可以尝试:

Where CAST(FLOOR(CAST([Date] AS FLOAT)) AS DATETIME) = CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)

这会使两个日期显示为:

  

2010-08-05 00:00:00.000

因此只比较忽略时间的日期

答案 5 :(得分:0)

发现了这个:

CAST(CONVERT (CHAR(8), GETDATE(), 112) AS smalldatetime)

从这里: reference

当我将smalldatetime字段添加到现有表时,这个sql对我有用:

SELECT     testing 
FROM         LTCCAssessment
WHERE     (testing = CAST(CONVERT(CHAR(8), GETDATE(), 112) AS smalldatetime))