最长的匹配前缀

Eya*_*yal 2 mysql hadoop hive

在MySQL中将"12684041234"与您要执行的最长前缀匹配

SELECT num_prefix
FROM nums
WHERE '12684041234' LIKE CONCAT(num_prefix, '%')
AND LENGTH(num_prefix) = (
    SELECT MAX(LENGTH(num_prefix))
    FROM nums
    WHERE '12684041234' LIKE CONCAT(num_prefix, '%')
)
Run Code Online (Sandbox Code Playgroud)

nums有一个以num_prefix前缀值命名的列.

我怎么能在蜂巢中做到这一点?

小智 7

这就是我在MySQL中的表现:

SELECT num_prefix FROM nums
  WHERE '12684041234' LIKE CONCAT(num_prefix,'%')
  ORDER BY num_prefix DESC
  LIMIT 1
;
Run Code Online (Sandbox Code Playgroud)

这将给出最长的前缀(ORDER BY .. DESC)和只有一行(LIMIT 1).

  • 这将提供极差的性能。该条件永远不能使用 num_prefix 上的索引,因此此查询将始终需要全表扫描。这需要更多的努力,但您可以搜索 WHERE num_prefix IN (12684041234,1268404123,126840412,12684041,1268404,126840,12684,1268,126,12,12)。 (2认同)