在SQL Server中比较日期

问题描述:

如何检查2个日期在SQL脚本中是否相等?在SQL Server中比较日期

从前端传递的值是“2010-12-04二十二点14分49秒”,并在表的日期是“2010-12-04 22:14:49.253”

我不关心millisec。我想这

DATEDIFF(SS,'2010-12-04 22:14:49','2010-12-04 22:14:49.253') = 0 

,并得到了以下错误

DateDiff函数导致了 溢出。分隔两个日期/时间实例的日期部分 的数量是 太大。尝试使用datediff与 不太精确的日期部分。

+1

我不明白你的样本。 – 2010-12-05 20:47:58

在我的SQL Server(2008 R2)这个片段的T-SQL代码的工作就好了....

你确定你没有在你的日期引入一个错字(如1010-12-04......)不知何故,这样两个日期之间的距离真的会很大?

那么它们之间的秒数的确可以溢连SQL Server的大数字范围 - 而这正是该错误信息是说...

+0

谢谢你有一个错字。有一个机会,用户将尝试搜索更长的差距的日期。在那种情况下,我该如何防止这个错误? – dotnetrocks 2010-12-05 20:57:38

+0

@Dotnetrocks:也许你应该检查DATEDIFF与例如第一天 - 如果差价不到一天,那么你可以检查SECONDS。或者只是赶上例外情况 - 如果发生这种情况,日期显然会相差很远。 – 2010-12-05 21:10:07

你是在对一个datetimeWHERE条款使用呢?

如果因此就使用

DECLARE @d DATETIME = '2010-12-04 22:14:49.000' 

SELECT .... 
WHERE YourCol >= @d AND YourCol < DATEADD(SECOND,1,@d) 

这将是更优化搜索和高效的反正。

这从日期删除秒

where convert (varchar(10), @date1, 108) + ' ' + CONVERT(varchar(5), @date1, 108) = convert (varchar(10), @date2, 108) + ' ' + CONVERT(varchar(5), @date2, 108) 

角色每个像下面的示例中的日期时间值的:

declare @stuff as datetime 
set @stuff = getdate() 
select @stuff 
SELECT CONVERT(VARCHAR(26), @stuff, 120) 

输出=

2010-12-05 16:17:49.720 

2010-12-05 16:17:49 

转换为类型120不包括毫秒。

请按照此LINK进行其他类型的转换。