假设我有一个字符串列表
DF01
FR10
FR12
RT10
FRFF
我得到号码FR10
。
我希望查询得到FR10
,这是左边最好的匹配。有没有可以做到的查询?
我试过下面的查询,但没有运气。
SELECT * FROM table
WHERE str_col LIKE CONCAT('FR10', '%');
那么如何查询以获得以下顺序的结果(最佳匹配)。
FR10
FR12
FRFF
答案 0 :(得分:3)
这样的事情怎么样?
SELECT *
FROM table1
WHERE str_col LIKE 'FR10%'
OR str_col LIKE 'FR1%'
OR str_col LIKE 'FR%'
OR str_col LIKE 'F%'
ORDER BY 4 * (str_col LIKE 'FR10%') +
3 * (str_col LIKE 'FR1%') +
2 * (str_col LIKE 'FR%') +
1 * (str_col LIKE 'F%') DESC,
CHAR_LENGTH(str_col),
str_col
输出:
| STR_COL | |---------| | FR10 | | FR12 | | FRFF |
这是 SQLFiddle 演示