我需要在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子串的最大数量以及返回的所有行。我需要所有匹配中的子字符串和所有行中的最大数字。
感谢您的帮助!
答案 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表,每行有一个值,但有时候我们必须发挥我们处理的手。)