Sql server 2008 比较SQL Server中的日期

Sql server 2008 比较SQL Server中的日期,sql-server-2008,Sql Server 2008,如何检查sql脚本中的两个日期是否相等 从前端传递的值为“2010-12-04 22:14:49”,表中的日期为“2010-12-04 22:14:49.253” 我不在乎毫秒。我试过这个 DATEDIFF(SS,'2010-12-04 22:14:49','2010-12-04 22:14:49.253') = 0 并得到以下错误 datediff函数导致 溢流日期部分的数量 将两个日期/时间实例分开是非常困难的 太大了。尝试将datediff与 不太精确的日期部分 在我的SQL Serve

如何检查sql脚本中的两个日期是否相等

从前端传递的值为“2010-12-04 22:14:49”,表中的日期为“2010-12-04 22:14:49.253”

我不在乎毫秒。我试过这个

DATEDIFF(SS,'2010-12-04 22:14:49','2010-12-04 22:14:49.253') = 0
并得到以下错误

datediff函数导致 溢流日期部分的数量 将两个日期/时间实例分开是非常困难的 太大了。尝试将datediff与 不太精确的日期部分

在我的SQL Server(2008 R2)上,这段T-SQL代码运行良好

你确定你的约会中没有出现打字错误(例如,
1010-12-04……
),因此两个日期之间的距离会非常大吗

然后,它们之间的秒数甚至可能溢出SQL Server的大数值范围-这正是错误消息所说的…

在我的SQL Server(2008 R2)上,这段T-SQL代码工作得很好

你确定你的约会中没有出现打字错误(例如,
1010-12-04……
),因此两个日期之间的距离会非常大吗


然后,它们之间的秒数甚至可能溢出SQL Server的大数值范围-这正是错误消息所说的…

您是否在
WHERE
子句中对
datetime
列使用此值

如果是这样,就用

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

SELECT ....
WHERE YourCol >= @d AND YourCol < DATEADD(SECOND,1,@d)
DECLARE@d DATETIME='2010-12-0422:14:49.000'
选择。。。。
其中YourCol>=@d和YourCol

无论如何,这将更具吸引力和效率。

您是否在
WHERE
子句中对
datetime
列使用此选项

如果是这样,就用

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

SELECT ....
WHERE YourCol >= @d AND YourCol < DATEADD(SECOND,1,@d)
DECLARE@d DATETIME='2010-12-0422:14:49.000'
选择。。。。
其中YourCol>=@d和YourCol

无论如何,这将更加方便和高效。

这将从日期中删除秒数

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

这将从日期中删除秒数

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

到类型120的转换不包括毫秒


对于其他类型的转换,请遵循此操作。

强制转换每个日期时间值,如下例所示:

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

2010-12-05 16:17:49.720

到类型120的转换不包括毫秒


对于其他类型的转换,请遵循此操作。

我没有发现您的示例中有此错误。我没有发现您的示例中有此错误。感谢您的输入有误。用户可能会尝试搜索间隔较长的日期。在这种情况下,我如何防止此错误?@Dotnetrocks:也许您应该使用DAY first来检查DATEDIFF,例如,如果差值小于一天,则可以使用秒来检查。或者只是捕捉例外情况——如果发生这种情况,日期显然相距较远。感谢输入错误。用户可能会尝试搜索间隔较长的日期。在这种情况下,我如何防止此错误?@Dotnetrocks:也许您应该使用DAY first来检查DATEDIFF,例如,如果差值小于一天,则可以使用秒来检查。或者只是捕捉异常——如果发生,日期显然有点不同。有没有办法从日期中删除秒数。然后我就可以做一对一的比较了。如果对列应用函数以删除秒数,则可以保证不能使用索引来满足此查询,并且将扫描整个表。我写的查询可以通过范围搜索来满足。@dotnetrocks您可以使用SET@d=DATEADD(MS,-DATEPART(MS,@d),@d)从参数中删除毫秒。是否有办法从日期中删除秒数。然后我就可以做一对一的比较了。如果对列应用函数以删除秒数,则可以保证不能使用索引来满足此查询,并且将扫描整个表。我写的查询可以满足范围搜索。@dotnetrocks您可以使用SET@d=DATEADD(MS,-DATEPART(MS,@d),@d)从参数中删除毫秒