【问题标题】:How to SELECT between two dates in SQL Server如何在 SQL Server 中的两个日期之间进行选择
【发布时间】:2019-10-09 05:35:18
【问题描述】:

我需要使用两个日期的范围在表中给出选择计数,但是我的日期是“yyyy-MM-dd”格式,并且当我执行选择 SQL 时它返回以下错误:

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

这是我正在使用的查询:

SELECT COUNT(*) AS score 
FROM requests 
WHERE date_em BETWEEN '2019-04-01' AND '2019-04-30'

表结构

  • date_em = 日期时间

有人可以帮我吗?

【问题讨论】:

  • 使用2019040120190430 作为日期常量(不带破折号),因为该格式明确地转换为日期时间。

标签: sql sql-server datetime select between


【解决方案1】:

我的首选方法是:

SELECT COUNT(*) AS score
FROM requests
WHERE date_em >= '2019-04-01' AND
      date_em < '2019-05-01'

这会处理时间组件并将使用索引。

以下内容也适用于 SQL Server:

SELECT COUNT(*) AS score
FROM requests
WHERE CONVERT(date, date_em) BETWEEN '2019-04-01' AND '2019-04-30'

在 SQL Server 中,这也将使用索引(如果可用)。但是,通常列上的函数会排除使用索引,所以我对这种方法比较犹豫。

【讨论】:

  • 您的案例 2 非常完美!它在这里运作良好。谢谢! @GordonLinoff
  • 因为这是使用日期,你应该知道this behavior 使用BETWEEN @GuilhermeStichtenoth
  • 如果您使用的是 BETWEEN,请务必查看执行计划以查看您是否使用了 index.html。 (当然,如果您在日期列上有索引)。
【解决方案2】:

你试过了吗

SELECT COUNT(*) AS score FROM requests WHERE date_em BETWEEN '2019-04-01 00:00' AND '2019-04-30 23:59'

添加 00:00 和 23:59 使其看起来像 DateTime。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多