【问题标题】:Getting data in a date range from database从数据库中获取日期范围内的数据
【发布时间】:2012-12-19 18:38:14
【问题描述】:

我总是将我的日期作为 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

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

我在这里做错了什么?

提前致谢。

【问题讨论】:

  • 没有必要为FROM_UNIXTIME() 指定格式,而且您确实给出了错误的格式。应该是 yyyy-mm-dd,而不是 dd-mm-yyyy,%Y-%m-%d
  • Michael:这听起来很奇怪,但我使用的是 jquery datepicker。我在那里选择的格式是 d-m-Y。我知道默认格式应该是 Y-m-d,但在我居住的国家/地区,我们使用不同的日期格式。所以即使做了你刚才建议的事情,它仍然不起作用。谢谢!
  • 查询前转换一下
  • @moonwalker 您没有将日期作为字符串存储在数据库中,对吧?时间比较(尽管可能很棘手)应该与语言环境无关;所以你应该在一个独立于语言环境的空间中进行比较,比如时间戳。
  • @Javier:好的,现在知道了。非常感谢您的帮助。

标签: mysql unix-timestamp


【解决方案1】:

使用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

【讨论】:

  • 像魅力一样工作。非常感谢迈克尔!
【解决方案2】:

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

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

【讨论】:

  • 这包括比较中时间戳的时间部分,这似乎是 OP 试图避免的。
  • @Michael - 如果是这样,那么你的答案是正确的,但根据他的问题,我不能 100% 确定是这种情况。
【解决方案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

【讨论】:

  • +1... 我真的很喜欢使用to_unixtime 来避免混淆任何索引。
  • 我也喜欢这个解决方案,但不幸的是哈维尔,我的数据库中不断出现错误“FUNCTION myDatabase.to_unixtime 不存在”。
  • @moonwalker 如果您尝试改用 UNIX_TIMESTAMP() 函数会怎样?
  • @moonwalker:我假设您只想比较当前日期而不是时间。如果您想要整个时间戳,请使用 unix_timestamp() 不带参数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 2020-11-20
  • 2014-03-17
相关资源
最近更新 更多