在下表中,我如何匹配“FG2-4G4T5
”,以便第一个返回的行是最佳匹配(即“FG2-4G
”) ?
part_match
^FG2|^FF2|^FF3-S|^FF4-GR
^FG2-4G
^FG2
FG2-RGST
以下查询在这种情况下不起作用,因为“^FG2|^FF2|^FF3-S|^FF4-GR
”的长度更长:
SELECT * FROM parts WHERE 'FG2-4G4T5' REGEXP part_match ORDER BY length(part_match) DEC
任何帮助将不胜感激。提前致谢。
最佳答案
有时 K.I.S.S.解决方案是最好的。保留另一列列出与模式匹配的文本的实际长度?
part_match part_match_length
======================================
^FG2|^FF2|^FF3|^FF4 3
^FG2-4G 6
^FG2 3
因此...
SELECT * FROM parts
WHERE 'FG2-4G4T5' REGEXP part_match
ORDER BY part_match_length DEC
从技术上讲,第二列甚至不一定是长度 - 只是某种表示给定模式提供的匹配程度的指示。
关于mysql - 匹配最佳正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5237328/