我不太喜欢数据库,在处理mysql查询时遇到以下问题:
SELECT
CCMD.id AS crop_calendar_message_details_id,
CCMD.broadcasting_start_date AS broadcasting_start_date,
CCMD.broadcasting_end_date AS broadcasting_end_date,
CCMD.creation_date AS creation_date,
CCM.id AS message_id,
CCM.content_en AS content_en,
IFNULL(CCMN.content, CCM.content_en) AS content,
CCMN.audio_link AS audio_link,
CCMD.crop_action_details_id AS crop_action_details_id
FROM CropCalendarMessageDetails AS CCMD
INNER JOIN CropCalendarMessage AS CCM
ON CCMD.crop_calendar_message_id = CCM.id
LEFT JOIN CropCalendarMessageName AS CCMN
ON CCMN.crop_calendar_message_id = CCM.id AND CCMN.language_id = :language_id
INNER JOIN CropActionDetails AS CAD
ON CCMD.crop_action_details_id = CAD.id
WHERE
CCMD.commodity_id = 10
AND
CCMD.country_id = 2
AND
CAD.id = :cad_id
AND
CCMD.broadcasting_start_date >= CURDATE()
AND
CURDATE() <= CCMD.broadcasting_end_date
ORDER BY CCMD.broadcasting_start_date
我有一些记录的日期字段具有以下固定值:
CCMD.broadcasting_start_date = 22/12/2018 23:59:00
CCMD.broadcasting_end_date = 30/05/2018
所以理论上我的查询应该跳过这些值,因为我在where子句中设置了以下部分:
AND
CCMD.broadcasting_start_date >= CURDATE()
AND
CURDATE() <= CCMD.broadcasting_end_date
问题是这些记录是由我的查询返回的,所以这个日期筛选条件不起作用。
为什么?怎么了?我错过了什么?我该怎么修?
1条答案
按热度按时间shstlldc1#
在处理日期/时间值和查询时,我个人总是尝试应用>=和<边界。例如,如果你想在2018年3月内完成所有活动,我会做
通过做大于或等于一个日期的开始,你可以从午夜开始一直到整个日期周期。至于结束日期,我总是少于第二天(因此是4月1日)。所以我在3月31日晚上11:59:59拿到了所有的东西。
这样,您也不需要仅仅为了确保某个内容在同一天或其时间部分而干扰日期转换函数。
这可能有助于解决查询的日期/时间问题。