【问题标题】:Validate a date range within MySQL query验证 MySQL 查询中的日期范围
【发布时间】:2012-11-26 10:55:33
【问题描述】:

(请原谅我的无知。)

我使用 PDO 查询来使用 SELECT 然后获取一些值,结果我只需要获取一些在其开始日期和结束日期内的条目。

我的数据库

+----------+-----------------+----------------------+--------------------+
| id (INT) | title (VARCHAR) | start_date (VARCHAR) | end_date (VARCHAR) |
+----------+-----------------+----------------------+--------------------+
|    1     |     buddy       |     2012-11-26       |     2012-11-30     |
|    2     |     metro       |     2012-12-05       |     2012-12-20     |
|    3     |     justin      |     2012-11-28       |     2012-12-01     |
+----------+-----------------+----------------------+--------------------+

我的查询如下:

$query = "SELECT title, start_date, end_date FROM debts WHERE start_date >= CURDATE() AND end_date >= CURDATE()";

我想要实现的是,只要start_date 是今天或更大,但不超过end_date,它将是有效的。这将返回id 1 的行,但是如果我将start_date 更改为2012-11-25,它将由于AND 上的第一个条件而失败。我真的很困惑,因为我是新手,是否有任何内置函数来处理这种情况?

【问题讨论】:

  • start_date >= CURDATE() AND end_date >= CURDATE()。抱歉,我不明白那部分
  • 比较日期时使用 date_format(),w3schools.com/sql/func_date_format.asp
  • “它会失败”是什么意思...你收到错误了吗?如果是,是哪一个?
  • 对不起,没有抛出错误,它有效但不是我想要的。为了澄清,我编辑了我的帖子。

标签: php mysql date date-range


【解决方案1】:

这样更好:

从债务中选择标题、开始日期、结束日期 WHERE date(now()) BETWEEN start_date AND end_date

【讨论】:

  • Thus between 表示它包括start_date/end_date上指定的日期?
  • 是的,它使用 start_date 和 end_date 字段的索引在此处阅读更多信息dev.mysql.com/doc/refman/5.0/en/…
【解决方案2】:
SELECT title, start_date, end_date FROM debts
WHERE start_date >= CURDATE() AND end_date <= CURDATE()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-07
    • 2011-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多