SQL 查询日期范围保存在 2 列中
Posted
技术标签:
【中文标题】SQL 查询日期范围保存在 2 列中【英文标题】:SQL query date range saved in 2 columns 【发布时间】: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? 【参考方案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'
【讨论】:
以上是关于SQL 查询日期范围保存在 2 列中的主要内容,如果未能解决你的问题,请参考以下文章