【问题标题】:mysql query datetime fields accuracymysql查询日期时间字段的准确性
【发布时间】:2012-02-29 00:41:39
【问题描述】:

我正在使用 MySql 5.5,

我在半径记帐表上使用以下查询。

  • 查询1:

    SELECT * FROM database.table WHERE framedipaddress='192.168.1.1' and '2011-09-09' BETWEEN acctstarttime AND acctstoptime;

acctstarttimeacctstoptime 字段是datetime 类型,格式为YEAR-MT-DY HR:MN:SC

使用 query2 显示我的 query1 的结果并不总是准确的,query1 有时会返回任何内容或不正确的行。

  • 查询2:

    SELECT * FROM database.table WHERE framedipaddress = '192.168.1.1' ORDER BY acctstarttime DESC LIMIT 0, 400;

是否有不同的方法来查询两个datetime,字段,或者是数据库健全性/数据是问题吗?

欢迎对我的逻辑错误提供任何指导。

这是我现在查询的question

【问题讨论】:

  • 您希望显示什么?您的查询应显示在 2011 年 9 月 8 日至 2011 年 9 月 9 日午夜登录的所有用户。
  • 是的,Joachim,这就是我们想要的。

标签: mysql accounting


【解决方案1】:

'2011-09-09' = '2011-09-09 00:00:00' 因此,您只查询在此时间之前具有 acctstarttime 且在此时间之后具有 acctstoptime 的帐户。

如果您要查找 2011 年 9 月 9 日开始的帐户。那你就可以了

...
WHERE
acctstarttime >= '2011-09-09' AND acctstarttime < '2011-09-10'

如果您要查找在 2011 年 9 月 9 日开始和结束的帐户。然后做:

...
WHERE
acctstarttime >= '2011-09-09' AND acctstarttime < '2011-09-10' AND
acctstoptime >= '2011-09-09' AND acctstoptime < '2011-09-10' AND

仅供参考,如果您使用BETWEEN,它包括边界,因此它会包括2011-09-10 00:00:00

【讨论】:

  • 本,谢谢你的例子。你是什​​么意思“之间包括界限”?。
  • BETWEEN 等价于min &lt;= x &lt;= max,如果 x 等于 min 或 max,它将被包括在内,所以如果你这样做 date BETWEEN '2011-09-09' AND '2011-09-10',它将包括日期 = 到午夜的记录 ('2011-09-10 00 :00:00') 10 日。
  • 我可能需要为此打开另一个问题 - 如果我正在寻找一个等于或介于两个字段时间之间的特定时间,那会有所不同吗?因此,例如我想要 2011-09-09 01:00:00 并且它介于开始和停止时间之间。感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 2011-05-30
  • 2018-05-31
  • 2023-03-03
  • 2016-07-09
  • 2013-05-12
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
相关资源
最近更新 更多