我有两个字段,“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”字段。
答案 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()
这足以获取过去发布的记录。