【问题标题】:mysql query of a date, between two date fieldsmysql查询一个日期,在两个日期字段之间
【发布时间】:2012-02-01 14:50:47
【问题描述】:

我正在使用 MySql 5.5。

我需要在具有特定 IP 地址的日期找到用户 ID。

这些字段是用户 ID、IP 地址、开始日期、结束日期。

例如,我正在寻找 2011 年 9 月 12 日 IP 地址为 192.168.1.1 的用户 ID。

查询将是相似的 select * from database where ipaddress='192.168.1.1' and 2011-12-09 is in(startdate and enddate);

欢迎任何帮助指出这个逻辑缺陷。谢谢。

【问题讨论】:

  • AND '2011-12-09' BETWEEN startdate AND enddate

标签: mysql accounting freeradius


【解决方案1】:

如果你想,还不是很清楚:

'2011-12-09' BETWEEN startdate AND enddate

或:

'2011-12-09' = startdate AND '2011-12-09' = enddate

【讨论】:

  • 请注意,between 会进行 <=/>= 比较,因此在 start- 和 enddate 上执行 = 可能不会在每种情况下给出完全相同的结果。
  • 抱歉,我想要第一个''2011-12-09' BETWEEN startdate AND enddate'
【解决方案2】:

显而易见的解决方案是:

  [...]
AND
  startdate <= '2011-12-09'
AND
  enddate >= '2011-12-09'

但是有一个快捷方式using BETWEEN,所以你可以简单地写:

  [...]
AND
  '2011-12-09' BETWEEN startdate AND enddate

注意:BETWEEN 也适用于数字、字符串和其他东西,并且可以通过写 NOT BETWEEN 来否定它 - 有时非常有用。

【讨论】:

  • 感谢您的提示,ypercube - 我不是以英语为母语的人,所以如果您懒得查找单词会发生这种情况......但现在它是正确的。跨度>
【解决方案3】:

由于有开始和结束日期,可能是这样的:

SELECT * FROM table WHERE ipaddress = '192.168.1.1' AND '2011-12-09' >= startdate AND '2001-12-09' <= enddate;

或者正如 ypercube 所指出的,您可以使用BETWEEN:

SELECT * FROM table WHERE ipaddress = '192.168.1.1' AND '2011-12-09' BETWEEN startdate AND enddate;

【讨论】:

  • 格式化查询会使这更容易阅读,不得不水平滚动很烦人;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 2019-08-05
相关资源
最近更新 更多