我想编写一个查询来显示尚未过期的作业。我还想展示今天即将到期的工作。
SELECT jd.`job_title`,jd.`date_expiry`,jc.`category_title`
FROM `job_details` AS jd
JOIN `job_category` AS jc
ON jc.`category_id`=jd.`category_id`
WHERE jd.`company_id`=2
AND jd.`date_expiry` >= NOW()
ORDER BY jd.`date_expiry` ASC
该查询适用于昨天或之前过期的作业,但它不会显示今天过期的作业。今天即将到期的工作应该向用户显示。请帮忙。
答案 0 :(得分:1)
我认为你的查询存在的问题是NOW()
在这个确切的时刻返回一个时间戳,可能是在一天的中间,开始或结束。如果NOW()
在当天中间,那么之前那个到期的任何内容都将从您的查询中排除。一种解决方法是与午夜的当前日期进行比较。
您可以使用TIMESTAMP(CURRENT_DATE)
来实现此目的,并使用read here获取非常有用的DBA Stack Exchange问题。
SELECT
jd.job_title,
jd.date_expiry,
jc.category_title
FROM job_details AS jd
INNER JOIN job_category AS jc
ON jc.category_id = jd.category_id
WHERE jd.company_id = 2 AND
jd.date_expiry >= TIMESTAMP(CURRENT_DATE) -- compare to today at midnight
ORDER BY jd.date_expiry