我想编写一个查询以显示尚未到期的作业。我还想展示今天即将到期的工作。

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


该查询对于昨天或之前已过期的作业正常运行,但不显示今天已过期的作业。今天到期的工作应该显示给用户。请帮忙。

最佳答案

我认为查询的问题是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

10-06 15:23