【问题标题】:Inexact searching for nearest time value不精确地搜索最近的时间值
【发布时间】:2011-10-09 15:29:09
【问题描述】:

我正在寻找一种以编程方式和语法高效的方式来搜索基于时间戳的值。本质上我想找到最接近的时间戳匹配......

例如在我的 MySQL 表中:

ID    TIME    Blob
1    4:03:10    abc
2    4:04:30    def
3    4:04:45    ghi

我想根据时间 4:04:40 查询这个表。我想返回记录 ID #3...如果我搜索 4:04:35 我想返回 ID #2...我该如何实现呢?我在这个表中有数百万行,我在想像 levenshtein dist 这样的东西会太慢..?

干杯!

【问题讨论】:

    标签: mysql sql search arraylist fuzzy-search


    【解决方案1】:

    怎么样:

    SELECT id, MIN(ABS(time(time) - time("4:04:35"))) FROM table
    

    【讨论】:

      【解决方案2】:

      请耐心等待,我更习惯于 Oracle,如果需要,可以像数字一样操作日期,但我认为您应该查找日期与您的搜索日期差异最小的行。差异可能是正数或负数,因此需要 ABS() 来处理。

      怎么样

      SELECT table.id, 
             ABS(TIMESTAMPDIFF(SECOND, table.time, [datetime.now])) as difference
      FROM table
      

      如果看起来没问题,那么您必须选择具有最小 [差异] 的 ID

      【讨论】:

        【解决方案3】:

        SELECT MIN(time) FROM table WHERE TIME > [datetime.now]

        【讨论】:

        • 但如果我正在搜索 4:04:35 这将返回错误的 ID 值(#3 而不是 #2)所以需要嵌套(即 max
        • 啊错过了那部分。我不确定 MySQL 是否有内置的东西可以做到这一点。如果没有,那可能会尽可能高效。
        猜你喜欢
        • 2017-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-11
        • 1970-01-01
        • 2020-12-19
        • 2010-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多