日期和时间MySQL声明

时间:2016-06-28 08:49:01

标签: mysql

我有两个字段,“cont_time_published”和“cont_date_published”,我想用它来过滤记录列表中的结果。

select *
from news
WHERE cont_date_published < CURDATE() AND cont_time_published < CURTIME()

我正在尝试实现只显示发布时间和发布日期过去的记录的列表。因此它会过滤一个具有今天日期但时间仍在未来的记录。

当日期是今天且时间是未来时,结果是错误的。

cont_date_published仅为“DATE”字段,cont_time_published为“TIME”字段。

4 个答案:

答案 0 :(得分:2)

如果您需要获取过去发布的记录(今天过去几小时或之前),请尝试:

SELECT * 
 FROM news  
  WHERE cont_date_published < CURDATE() 
  OR (cont_date_published = CURDATE() AND cont_time_published < CURTIME());

抱歉我的错误,忘了OR

答案 1 :(得分:1)

试试这个

SELECT *
FROM news
WHERE (cont_date_published < CURDATE() ) AND ( cont_time_published < CURTIME() ) 
ORDER BY id DESC;

答案 2 :(得分:1)

您可以CAST到实际日期:

WHERE CAST(CONCAT(cont_date_published, ' ', cont_time_published) AS DATETIME)<NOW()

...但这可能会阻止查询优化器使用索引(如果有的话)。另一种选择是:

WHERE cont_date_published<CURDATE() OR
    (cont_date_published=CURDATE() AND cont_time_published<CURTIME())

当然,通过使用单个DATETIME列的适当数据库设计,可以轻松避免所有这些额外工作:

WHERE cont_published<NOW()

答案 3 :(得分:0)

   select * from news WHERE cont_date_published < CURDATE()

这足以获取过去发布的记录。