从数据库获取日期范围内的数据

时间:2012-12-19 18:38:15

标签: mysql unix-timestamp

我总是将日期存储为数据库中的unix时间戳。现在我有两个约会: 我想在网站上展示的一些图片的开始日期和结束日期。图像应在“开始日期”上可见,并在达到“结束日期”后消失。

此刻我使用这个简单的查询:

SELECT name, image, link
FROM exclusive
WHERE CURDATE( ) >= from_unixtime( start_date, '%d-%m-%Y' )  
AND CURDATE( ) <= from_unixtime( end_date, '%d-%m-%Y' )
AND category = 'movies'
LIMIT 0 , 5

但是每次返回一个空结果,尽管数据范围内有两个字段。

我在这里做错了什么?

提前致谢。

3 个答案:

答案 0 :(得分:3)

试试这个,它有一个额外的好处,你实际上可以使用你在开始和结束日期可能有的任何索引。

SELECT name, image, link
FROM exclusive
WHERE UNIX_TIMESTAMP() BETWEEN start_date AND end_date
AND category = 'movies'
LIMIT 0 , 5

答案 1 :(得分:3)

问题是你是作为字符串类型进行比较,而不是时间戳。因此,格式很重要。改为yyyy-mm-dd使其有效(因为最重要的部分,即年份,位于左侧)。

但更好,并且可以使用索引进行优化,以比较时间戳。

WHERE start_date <= unix_timestamp(curdate())
    AND end_date >= unit_timestamp(curdate())

或者,对于某些SQL引擎,使用BETWEEN运算符:

WHERE unix_timestamp(curdate()) BETWEEN start_date AND end_date

答案 2 :(得分:3)

使用DATE()功能删除时间戳的时间部分,而不是格式化:

SELECT name, image, link
FROM exclusive
WHERE 
    CURDATE( ) BETWEEN DATE(from_unixtime( start_date ) )
    AND DATE(from_unixtime( end_date ) )
    AND category = 'movies'
LIMIT 0 , 5