【问题标题】:MySQL Select: WHERE (time now) = BETWEEN tablevalue AND tablevalueMySQL Select: WHERE (time now) = BETWEEN tablevalue AND tablevalue
【发布时间】:2011-06-13 02:04:52
【问题描述】:

我正在寻找一种方法来选择当前时间在该行中的两个设置值之间的行。我已经建立了一个包含 3 列的表,其中 2 个包含时间戳 (HH:MM:SS),另一个包含一个字符串。有没有办法获得与当前时间对应的字符串? 用更抽象的方式说:

SELECT String FROM TableName WHERE(当前时间)BETWEEN(下限时间值)AND(上限时间值);

所以基本上,基于当前时间,我的脚本应该输出正确的字符串。

我该怎么做? 谢谢!

【问题讨论】:

  • lower_limitupper_limit 是什么类型?
  • 你的夜晚是否超过两天? BETWEEN '22:00:00' AND '05:00:00' 可能不会返回您等待的内容。

标签: mysql select time where-clause


【解决方案1】:

MySQL 中,时间戳是一个相当容易混淆的词。

如果它们是lowerlimitupperlimitTIME00:00:0023:59:59 的列:

SELECT  String
FROM    TableName
WHERE   CURTIME() BETWEEN lowerlimit AND upperlimit
        OR CURTIME() BETWEEN SUBTIME(upperlimit, '24:00:00') AND lowerlimit
        OR SUBTIME(CURTIME(), '24:00:00') BETWEEN SUBTIME(upperlimit, '24:00:00') AND lowerlimit

这将正确处理午夜转换。

【讨论】:

  • 一开始也犯了同样的错误。 NOW() 也包含日期部分。应该使用 CURTIME()。不投反对票。
  • ??不知道你在问什么。无论如何,现在你的答案比其他人更适合这个问题。
  • 谢谢,当我删除 OR 部分时,它似乎可以工作,如果我在返回“下限”后不遗漏所有内容。另外,我没有从“下限”到“上限”的午夜过渡。 :] 你应该知道我对 MySQL 知之甚少,你介意解释一下最后一部分吗?
  • @Chris: BETWEEN 是定向的,所以 2 BETWEEN 3 AND 1true2 BETWEEN 3 AND 1false。在MySQL 中,时间可以是负数,因此如果您有一个午夜转换(从22:0001:00),它会将其转换为BETWEEN '-02:00' AND '01:00'
【解决方案2】:
SELECT string_col
FROM your_table
WHERE CURTIME() BETWEEN lower_limit_col AND upper_limit_col

【讨论】:

    【解决方案3】:

    你的做法差不多就是这样:

    SELECT String FROM TableName WHERE CURTIME() BETWEEN (Lower Limit Time Value) AND (Upper Limit Time Value);
    

    【讨论】:

    • MySQL 中的括号是否也正确?我不熟悉语法,我目前正在通过 PHP 在我的查询中使用 Something(正常的“引号”似乎不起作用)。
    • 没有。反引号 ( ` ) 是分隔非标准列名的正确方法。即
    【解决方案4】:

    两列的类型应该是时间(而不是时间戳)。那么,答案就在你的问题中:

    select string from tablename where curtime() between lowerlimit and upperlimit
    

    不过,请确保夜晚不是从 22:00:00 到 06:00:00,否则它将无法正常工作。但是您可以为可能引入两个间隔:一个从 22:00:00 到 24:00:00,另一个从 00:00:00 到 06:00:00。

    【讨论】:

    • 啊,幸运的是我没有这些转换,不过感谢您的提醒!
    猜你喜欢
    • 2011-06-28
    • 2015-07-05
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多