【问题标题】:Timestamp Interval时间戳间隔
【发布时间】:2012-12-13 08:05:22
【问题描述】:

我有一个名为“s_timestamp”的列。

如何返回时间戳中包含当天的所有记录?

例如,

s_timestamp
2012-12-27 1:00:00
2012-12-27 2:00:00
2012-12-26 0:00:01
2012-12-20 0:00:02
2012-12-21 0:00:03

我想要以下输出:

2012-12-27 1:00:00
2012-12-27 2:00:00

如果不清楚,请告诉我。

【问题讨论】:

  • 时间戳是TIMESTAMP吗?
  • @WaleedKhan,是的。让我编辑问题。
  • 我不得不同意 JW 给出的答案。它还允许您通过简单地将查询中的“CURDATE”更改为您可能想要获取数据的任何日期来获取任何日期的信息。 (即 CURDATE,或 2012-11-23,或 2012-12-24,或您要查询的任何日期)

标签: mysql sql select timestamp


【解决方案1】:

只需使用CURDATE()。例如

SELECT *
FROM tableName
WHERE DATE(s_timestamp) = CURDATE()

【讨论】:

  • 嗯,时间戳是“2012-12-27 11:45:40”...如何从该时间戳中获取 curdate 然后运行查询?
  • @SohelMansuri WHERE DATE(s_timestamp) = CURDATE()
【解决方案2】:

这可能比将时间戳转换为DATE 更有效,尤其是如果您在时间戳列上有索引(应该有):

SELECT *
FROM tableName
WHERE s_timestamp >= CURDATE()

或者,如果您想排除任何未来日期:

SELECT *
FROM tableName
WHERE s_timestamp >= CURDATE()
  AND s_timestamp < DATE_ADD(CURDATE(), INTERVAL 1 DAY)

之所以有效,是因为当将DATETIMETIMESTAMPDATE 进行比较时,DATE 实际上被解释为具有0:00:00 的时间部分。

【讨论】:

  • 是的,DATE 不使用索引。但条件WHERE s_timestamp &gt;= CURDATE() 将选择从今天开始的所有天数,并且大于它。 WHERE s_timestamp BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 1 DAY) 将选择今天和明天。
  • 啊,我明白了,上限偏离了一秒。让我解决这个问题...there you go.
  • 这可能不仅更有效。如果s_timestamp上有索引,肯定会更高效,效率更高。
猜你喜欢
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 2014-07-12
相关资源
最近更新 更多