当前位置: 首页 > 面试题库 >

在SQL Server中无时间比较日期的最佳方法

裴俊能
2023-03-14
问题内容
select * from sampleTable 
where CONVERT(VARCHAR(20),DateCreated,101) 
=     CONVERT(VARCHAR(20),CAST('Feb 15 2012  7:00:00:000PM' AS DATETIME),101)

我想比较没有时间的日期

以上查询可以吗?或您建议的其他更好的解决方案

  • 我正在使用SQL Server 2005
  • 日期以UTC格式保存在服务器上
  • 用户根据此数据属于不同的时区

问题答案:

不要使用convert-无原因地涉及字符串。一个技巧是日期时间实际上是一个数字,而天是整数部分(时间是小数部分);因此,一天是值的 底数
:那只是数学,而不是字符串-快得多

declare @when datetime = GETUTCDATE()
select @when -- date + time
declare @day datetime = CAST(FLOOR(CAST(@when as float)) as datetime)
select @day -- date only

在您的情况下,无需转换回日期时间;并使用范围可以进行最有效的比较(尤其是在建立索引的情况下):

declare @when datetime = 'Feb 15 2012  7:00:00:000PM'
declare @min datetime = FLOOR(CAST(@when as float))
declare @max datetime = DATEADD(day, 1, @min)

select * from sampleTable where DateCreated >= @min and DateCreated < @max


 类似资料:
  • 问题内容: 这是我正在尝试执行的一些代码片段: 我似乎无法比较日期和日期时间值。比较这些的最佳方法是什么?我应该将日期时间转换为日期还是相反?我如何在它们之间转换。 (一个小问题,但似乎有点令人困惑。) 问题答案: 使用该方法将日期时间转换为日期: 或者,您可以使用代替。你可以用 消除之后的时间部分。

  • 问题内容: 我正在使用moment.js格式化我的日期时间,这里有两个日期值,当一个日期大于另一个日期时,我想实现一种特定的功能。我阅读了他们的大多数文档,但没有找到实现此目的的功能。我知道会在那里。 这是我的代码: 编辑 在这里,我正在比较两个日期,即,期望第一个日期大于第二个日期,但是它总是转到else条件。不知道为什么 问题答案: 我相信你正在寻找的查询功能,,,和。 但是要确切地说出您要尝

  • 我正在使用moment.js格式化我的日期时间,这里我有两个日期值,当一个日期大于另一个时,我想实现一个特定的函数。我读了他们的大部分文档,但没有找到实现这一点的函数。我知道它会在那里。 这是我的代码: 编辑 在这里,我比较了两个日期,即,希望第一个日期大于第二个日期,但它总是转到else条件。我不知道为什么?

  • 问题内容: 从SQL Server的datetime字段中删除时间部分时,哪种方法提供最佳性能? 或者 第二种方法的确以任何一种方式发送了更多的字节,但这可能不如转换速度那么重要。 两者看起来都非常快,但是处理成千上万行或更多行时速度可能会有所不同? 另外,是否有更好的方法可以消除SQL中日期时间的时间部分? 问题答案: 严格来说,方法耗费的资源最少: 事实证明,花了太多时间的人在相同的总持续时间

  • 问题内容: 以下代码有什么问题? 也许只比较日期而不是时间会更简单。我也不确定如何执行此操作,因此我进行了搜索,但找不到确切的问题。 顺便说一句,当我在警报中显示两个日期时,它们显示为完全相同。 我的代码: 有没有比较日期而不包含时间的简单方法? 问题答案: 我仍在学习JavaScript,而我发现唯一可以比较两个没有时间 的日期的方法是使用Date对象的方法,并将小时,分钟,秒和毫秒设置为零。然

  • 问题内容: 我在想这样的UTC时间字符串可能是可以的,因为如果在视图键中使用它们,则可以正确排序,但是存储时区(例如)会使文档更具可读性。从可读性的角度来看,将日期转换为纪元整数似乎没有什么吸引力,但对于性能而言可能是最好的选择(或者是否有所作为?)。这里推荐的做法是什么? 问题答案: 时间是一维的东西。时间戳加上时区是二维的,描述了时间点和位置。Couch视图是一维的(但不是GeoCouch插件