Mysql:搜索子字符串并返回右边最高#的子字符串

时间:2014-12-11 19:22:26

标签: mysql

我需要在mysql字段中搜索字符串以查找子字符串,如果它是返回的所有行的最大数字,则返回其右侧的数字。 (这个词最有可能在字符串中多次出现。)

SELECT max(cast(substring(mq.my_query_string, (locate("near/", mq.my_query_string)+5), 2) as signed)) AS "MaxNearDistance" 
FROM my_query mq, my_test mt 
WHERE mt.company_id = 123 
      AND mq.search_query_id = mt.my_query_id 
      AND locate("near/", mq.my_query_string) > 0;

这样可行,但它只给出了FIRST子串的最大数量以及返回的所有行。我需要所有匹配中的子字符串和所有行中的最大数字。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我会创建一个table-数字 - 包含我想要找到的每个数字字符串('0' - '99'为你)然后将它加入我的数据,如:

SELECT
  mq.my_query_string, MAX(numbers.ns)
FROM my_query AS mq
JOIN numbers ON CONCAT(mq.my_query_string, ' ') LIKE CONCAT('%near ', numbers.ns, ' %')
GROUP BY mq.my_query_string

CONCAT为数据添加空格,以便'11'与'1'不匹配。

SQLFiddle:http://sqlfiddle.com/#!2/8fda1c/4

(实际上,正确的方法是规范化你的数据,这样你就有了一个my_query_nears表,每行有一个值,但有时候我们必须发挥我们处理的手。)