【问题标题】:SQL query date range saved in 2 columnsSQL 查询日期范围保存在 2 列中
【发布时间】:2021-08-15 15:50:13
【问题描述】:

我有一个包含多条记录的表(Hire Rates)。我正在尝试根据日期查询查找记录,但无法使其正常工作。

基本上我正在寻找包含两个日期之间的日期的记录。如果我的查询日期是“2021-08-15”,它应该返回第三行(3000),因为查询日期介于两个日期之间。

它主要对我有用,除非查询日期等于开始日期或结束日期 - 在这种情况下,它不会返回任何结果。

表格

startDate endDate hireRate
2021-01-01 2021-03-05 2350
2021-03-06 2021-04-08 2890
2021-04-09 2021-09-15 3000

查询

$sql = "SELECT rate, currencyID FROM hire_rates WHERE status = '1' AND NOT (startDate >= '$queryDate' OR endDate <= '$queryDate')

【问题讨论】:

  • 如果您要查找包含两个日期之间的日期的记录,那么为什么在查询中使用 NOT?

标签: php mysql sql


【解决方案1】:

尝试添加“介于”条件。 像 select rate, currencyId from hire_rates where states =1 and not (cast($queryDate as DATE) between cast(startDate As DATE) and cast(endDate AS DATE) )

【讨论】:

    【解决方案2】:

    您将传递您关心的日期作为参数。然后你可以使用between(根据你对逻辑的描述):

    SELECT rate, currencyID
    FROM hire_rates
    WHERE status = 1 AND
          ? BETWEEN startDate AND endDate;
    

    其中? 是您传入的日期的参数。

    对于 2021-08-15,你可以写:

    WHERE status = 1 AND
          '2021-08-15' BETWEEN startDate AND endDate;
    

    如果你想要当前日期,实际上可以从数据库中获取:

    SELECT rate, currencyID
    FROM hire_rates
    WHERE status = 1 AND
          curdate() BETWEEN startDate AND endDate;
    

    【讨论】:

    • 当我尝试这个时,我无法让它工作。所以我已经完成了: SELECT rate, currencyID FROM hide_rates WHERE status = 1 AND startDate BETWEEN '2021-08-15' AND '2021-08-15' 但它没有返回我所期望的。顺便说一句,我只是以今天的日期为例——它将基于历史日期。
    【解决方案3】:

    然后试试这个,`$sql = SELECT hireRate FROM hide_rate WHERE startDate= '$queryDate'

    【讨论】:

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