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

DATEDIFF()或BETWEEN用于SQL查询中的日期范围

公良光熙
2023-03-14
问题内容

最近我被告知,BETWEEN在SQL中使用该方法有些不可靠,因此我应该使用DATEDIFF()。但是,另一位程序员告诉我不是这种情况,BETWEEN只要日期格式正确,该方法就可以在所有情况下出色地工作。

请有人通过说明哪种方法更好以及为什么来解决这场辩论。

目前,我的日期范围SQL如下所示:

DATEDIFF(d,'01-Jan-1970',SIH.[Something_Date]) >= 0 AND DATEDIFF(d,'01-Jan-2013',SIH.[Something_Date]) <= 0

但是,如果可以确定它是可靠的,我宁愿这样写:

SIH.[Something_Date] BETWEEN '01-Jan-1970' AND '01-Jan-2013'

在这种情况下,我使用的是MsSQL,但是我已经标记了MySQL,因为我想知道这在这里是否也适用


问题答案:

您的两个查询不相同。该datediff版本将包含所有01-Jan-2013时间的值,而介于两个版本之间的版本将仅包含时间01-Jan-2013所在的行00:00:00

如果您检查范围,并且不对该列进行任何计算,则查询将能够使用on索引,Something_Date并且同时包括来自01-Jan-2013任何时间部分的所有值。

where
  SIH.[Something_Date] >= '19700101' and
  SIH.[Something_Date] < '20130102'


 类似资料:
  • 问题内容: (1)表 (2)中的VBA 值 我想在子句中的语句中使用日期的内部运行查询。 当我在之外运行此查询时,它运行完美: 一次,我在中运行它不会给我一个错误,但也不会给我任何结果。 我认为问题是由和中的组合引起的。 我必须如何更改才能使其正常工作? 问题答案: 您在日期和时间之间缺少空格… 打开VBE并调试打印公式以查看结果(制造商确保您具有立即窗口[视图菜单/立即窗口])。 结果 2020

  • 我的文档中有一个日期范围(使用日期对象)如下所示 我试图弄清楚如何构建一个查询来返回包含特定日期的所有事件,例如,像.... 如果查询显示类似这样的内容,但在Firestore查询限制下可能不可能出现这种情况。 因此,我一直在挠头几个小时,要么为此构建一个查询,要么以某种方式结构我的数据,以允许这样做。 这有可能吗?

  • 问题内容: 我有一个看起来像这样的数据库表: 写入此日志时,它包含日志记录和unix时间戳。我需要的是获取每周报告,以了解每周有多少日志记录。这是我写的查询: 这给出了这样的结果: 伟大的!但是我想看到的是一个日期范围,如,所以我的结果集如下所示: 有什么办法吗? 问题答案: 使用以获得合适的日期一样,然后用得到你需要的格式。

  • 我有一个和列在我的表中。所以我试图检查指定的日期是否在这两列的范围内。例如: from_date: 2021-08-26 to_date: 2021-08-29 date: 2021-08-27 我试图使用运算符,但是语法是从相同的列名中选择日期范围。 在我的例子中,我想从不同的列中选择日期范围,比如下面的查询示例。有没有办法做到这一点? 谢谢你!

  • 问题内容: 使用SQL Server2008。我有一个存储的proc,它具有开始和结束日期作为日期范围的输入参数。 在where子句中查找在开始日期和结束日期之间有一个sql查询的 单个 sql查询,该查询可以处理日期均为null或都具有值的两种情况。 我不想使用IF语句。 问题答案: 如果存在索引,这将是最有效的,因为此条件是可保留的,并且将使用。 如果没有索引,则使用其他人提出的构造。

  • 问题内容: 我下面有一个SQL查询,它很好。 我正在修改此查询,以便它从闪亮的UI(daterange)输入日期。 我得到一个错误 不确定如何解决此查询,以便它需要从闪亮的UI中输入日期,需要帮助。 问题答案: 我通过简单地使用正则表达式来使用函数来做到这一点: