【问题标题】:Row count differs when using DATE and DATETIME使用 DATE 和 DATETIME 时行数不同
【发布时间】:2012-01-24 00:59:51
【问题描述】:

正如标题所说,使用 DATE 和 DATETIME 进行选择时,行数会有所不同。请指教。

我正在尝试选择 2012 年 1 月 1 日至 5 日之间的行。日期列数据类型是 bigint(UNIX 时间戳)。

select * from table_name
where sample_timestamp between unix_timestamp('2012-01-01')*1000 and unix_timestamp('2012-01-05')*1000 

如果我在 HH:MM:SS 中包含时间,则返回的行是正确的,即

select * from table_name
where sample_timestamp between unix_timestamp('2012-01-01 00:00:00')*1000 and unix_timestamp('2012-01-05 23:59:59')*1000 

任何意见将不胜感激。谢谢。

【问题讨论】:

  • 欢迎来到 Stack Overflow。您可以使用{} 工具栏按钮格式化源代码。这次我替你做了。
  • 谢谢阿尔瓦罗。我会记住这一点的。

标签: mysql datetime date


【解决方案1】:

“2012-01-05”实际上是“2012-01-05 00:00:00”,这不是您在第二次选择中写的内容。

我怀疑你的意思是

select * from table_name 
where sample_timestamp >= unix_timestamp('2012-01-01')*1000 
and sample_timestamp < unix_timestamp('2012-01-06')*1000

作为奖励,它也可以正确处理闰秒:)

【讨论】:

  • 感谢 Joachim 的快速响应。如果我只使用日期“2012-01-05”,那么它就是“2012-01-05 00:00:00”。但是,如果我将时间指定为 23:59:59,它会一直到 1 月 5 日结束。你能告诉我你为什么不使用 BETWEEN 吗?干杯:-)
  • 就在这两个“限制”之间,你必须在一天的最后一秒给它,就像你在第二个例子中所做的那样。例如,如果您不走运并且在查看日志时一直搜索到 23:59:59,您可能会错过 2012-06-30 23:59:60(是的,闰秒确实存在)或几毫秒之后如果时间是那么精细的话。在我自己被咬过一次之后,如果可能的话,我总是对结束时间使用独家限制;-)
猜你喜欢
  • 2011-06-13
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多