我真的很难从逻辑上考虑日期范围内的事物。
例如:
如果事件A 是第9号到第15号,然后用户搜索第10号到第13号,那么我现在就返回了从第10号到第13号的所有事件用户搜索的内容。
但是,由于事件A 来自9日至15日,因此不会在该搜索中显示,但我希望显示它,因为它仍在9日至15日的范围内。
我希望这是有道理的。
感谢您的帮助。
答案 0 :(得分:1)
我有一个类似的表,通常会执行以下操作来获取所有结果:
SELECT *
FROM `events`
WHERE ('2019-07-10' BETWEEN `start_date` AND `end_date`
OR '2019-07-13' BETWEEN `start_date` AND `end_date`);
答案 1 :(得分:1)
重叠的逻辑是,当两个时间跨度都在另一个末端开始时,两个时间跨度就会重叠。
这很容易实现为:
select e.*
from e
where e.start_date < $end_date and
$start_date < e.end_date;
如果该范围中包含end_date
,请改用<=
。
答案 2 :(得分:1)
SELECT *
FROM `events` as e
WHERE ( e.date_start BETWEEN [INPUT datestart] AND [INPUT dateend]
OR e.date_end BETWEEN [INPUT datestart] AND [INPUT dateend]
)
;
这将显示日期的可能重叠。
答案 3 :(得分:0)
数组中的wpquery:
'meta_query' => array(
array(
'key' => $metaKey,
// value should be array of (lower, higher) with BETWEEN
'value' => array('START_DATE', 'END_DATE'),
'compare' => 'BETWEEN',
'type' => 'DATE'
),
)
这是mysql和php中的真实示例:
$db = getDB();
$sql = "SELECT
DATE(invoice_date) AS invoice_date,
COUNT(sage_allsalesbyproduct.id) AS row_count,
SUM(sage_allsalesbyproduct.qty) AS total_qty,
SUM(sage_allsalesbyproduct.gross) AS total_gross,
sage_allsalesbyproduct.productcode,
ItemGroup as item_group
FROM sage_allsalesbyproduct
left join stock s on s.ProductCode = sage_allsalesbyproduct.productcode
WHERE
invoice_date BETWEEN :fromdate AND :todate
GROUP BY productcode
order by total_qty desc";
$stmt = $db->prepare($sql);
$stmt->bindParam("fromdate", $fromdate, PDO::PARAM_STR);
$stmt->bindParam("todate", $todate, PDO::PARAM_STR);
$stmt->execute();
$feedData = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo json_encode($feedData);
请记住,MySQL使用yyyy-mm-dd格式存储日期值。此格式是固定的,无法更改。
使用mysql,您还可以执行类似的操作
SELECT *
FROM order_details
WHERE order_date >= CAST('2014-02-01' AS DATE)
AND order_date <= CAST('2014-02-28' AS DATE);