如何从按时间戳筛选的数据库中选择结果


How to selected results from database filtered by time-stamp?

这个问题更像是在寻找最佳解决方案。我知道如何按照自己的方式去做D

我有几个时间间隔作为单词:

  • CCD_ 1
  • CCD_ 2
  • CCD_ 3
  • this_month

问题是时间作为UNIX时间戳保存在数据库中。

我将举一个例子。假设它是today。这意味着我需要从今天开始到结束的数据库中选择结果。

这意味着我需要获得当天的第一秒:

mktime(0, 0, 0);

最后一秒:

mktime(23, 59, 59);

然后用这样的东西查询数据库:

WHERE `timestamp` >= first_second OR WHERE `timestamp` <= last_sencond

是的,我需要为所有可能的字符串写这个。有更整洁的解决方案吗?

谢谢你的建议!:(

今天您可以使用:

WHERE CAST(FROM_UNIXTIME(timestamp) AS DATE) = CURDATE()

明天:

WHERE CAST(FROM_UNIXTIME(timestamp) AS DATE) = DATE_ADD(CURDATE(), INTERVAL 1 DAY)

本月:

WHERE MONTH(CAST(FROM_UNIXTIME(timestamp) AS DATE)) = MONTH(CURDATE())
where date between $start and $stop

使用maketime 根据选项(天、周、月等(定义开始和停止

"整洁的解决方案"是主观的吗?…:-(您的要求似乎与Mysql中已经回答的问题非常相似:选择两个日期之间的所有数据

阅读那里的所有链接

假设您希望记录今天有时间戳:

WHERE date >= UNIX_TIMESTAMP(CURDATE()) AND date <= UNIX_TIMESTAMP(CURDATE()+1)

请注意,第二部分是不必要的,除非你有项目的时间戳在未来。如果需要获取其他日期的值,请相应地计算日期,并使用UNIX_TIMESTAMP()将其转换为数字时间戳。这将比将数据库中的值转换为date格式具有更好的性能,因为这将导致无法使用索引。

我建议将DateTime存储为SQL的本地DateTime格式,并根据需要在应用程序中转换为unix时间戳。当然,您可能无法更改模式,但如果可以的话,最好使用RDBMS提供的最原生的数据类型。例如,这允许RDBMS更智能地处理DateTime列上的范围索引。尽管unix时间戳可以在任何使用基于unix Epoch的数学的平台上使用,但从技术上讲,它们仍然是特定于平台的格式。我也不会把DateTime到SQL写成Windows FILETIME,尽管FILETIME到DateTime的数学是已知的。