【问题标题】:MySQL: Proper date range between start and end date as two fieldsMySQL:开始日期和结束日期之间的正确日期范围作为两个字段
【发布时间】:2014-03-18 09:34:06
【问题描述】:

我有下表称为季节

+----+--------+------------+------------+
| id | cost   | start      | end        |
+----+--------+------------+------------+
| 33 |    255 | 2014-01-05 | 2014-04-16 |
| 17 |    357 | 2014-04-17 | 2014-04-19 |
| 65 | 191.25 | 2014-04-20 | 2014-07-10 |
| 49 |    255 | 2014-07-11 | 2014-08-23 |
| 81 | 191.25 | 2014-08-24 | 2014-12-18 |
+----+--------+------------+------------+

我正在尝试使用以下查询获取开始和结束之间的日期范围。

SELECT 
    *
FROM
    seasons
WHERE
    (start BETWEEN '2014-01-05' AND '2014-01-05' OR end BETWEEN '2014-01-05' AND '2014-01-05');

如果开始日期正好开始于字段上的值,我能够得到一个结果集。

+----+------+------------+------------+
| id | cost | start      | end        |
+----+------+------------+------------+
| 33 |  255 | 2014-01-05 | 2014-04-16 |
+----+------+------------+------------+

现在的问题是当我将日期提前到

2014-01-06

SELECT 
    *
FROM
    seasons
WHERE
    (start BETWEEN '2014-01-06' AND '2014-01-06' OR end BETWEEN '2014-01-06' AND '2014-01-06');

空集(0.00 秒)

没有结果。如何获取 SQL 上不同字段之间的日期范围?

感谢任何帮助。

【问题讨论】:

标签: mysql between date-range


【解决方案1】:

你的逻辑倒退了。如果您想要给定日期在该季节的季节,那么您的 where 子句应如下所示:

WHERE '2014-01-06' BETWEEN start AND end;

【讨论】:

  • 没有。这行得通!能简单解释一下为什么会倒退吗?谢谢
  • @LouieMiranda 当然可以。您最初的逻辑是检查开始日或结束日在'2014-01-06''2014-01-06' 之间的季节。这与说WHERE start = '2014-01-06' OR end = '2014-01-06' 相同。您真正想要的是日期在季节开始和结束日期内的任何季节。
  • 感谢吉姆的解释。
  • @LouieMiranda 没问题,很高兴为您提供帮助。
【解决方案2】:

由于您并不是真的在寻找一个范围而只需要一个特定的日期,您也可以只使用 (SQL Fiddle):

SELECT *
FROM seasons
WHERE start = '2014-01-05' OR end = '2014-01-05'

【讨论】:

    【解决方案3】:

    当查询某个日期是否在给定范围内时,WHERE 子句通常是:

    WHERE 'specified_date' BETWEEN 'start_date' AND 'end_date'
    

    否则它是一个不合逻辑的 MySQL 日期跨度,将返回一个空的结果集。

    BETWEEN比较运算符等价于:

    min

    因此,它应该像这样使用:

    在最小值和最大值之间的表达式

    这是来自 MySQL 的 BETWEEN Comparison Operator 文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      相关资源
      最近更新 更多