简而言之,我想将字典条目与一行文本匹配,但它不必匹配整行,只是开头.所以它实际上是一种反向LIKE%...%
例如,
SELECT * FROM `dictionary` WHERE
(`simplified` = '??????????????2000??'
OR `simplified` = '??????????????2000?'
OR `simplified` = '??????????????2000'
OR `simplified` = '??????????????200'
OR `simplified` = '??????????????20'
OR `simplified` = '??????????????2'
OR `simplified` = '??????????????'
OR `simplified` = '?????????????'
OR `simplified` = '????????????'
OR `simplified` = '???????????'
OR `simplified` = '??????????'
OR `simplified` = '?????????'
OR `simplified` = '????????'
OR `simplified` = '???????'
OR `simplified` = '??????'
OR `simplified` = '?????'
OR `simplified` = '????'
OR `simplified` = '???'
OR `simplified` = '??'
OR `simplified` = '?')
ORDER BY CHAR_LENGTH(`simplified`) DESC;
Run Code Online (Sandbox Code Playgroud)
这有效并且做我需要的但是我知道它非常低效.这样做还有其他办法吗?非常感谢!!
示例结果:
97576 ??
97484 ?
97566 ?
Run Code Online (Sandbox Code Playgroud)
怎么样
WHERE `simplified` = SUBSTRING(
'??????????????2000??',
0, CHAR_LENGTH(`simplified`))
Run Code Online (Sandbox Code Playgroud)
?可能不可索引,但至少查询很短.:)
你可以通过添加来优化它
AND `simplified` LIKE '?%'
Run Code Online (Sandbox Code Playgroud)
拒绝所有至少不以正确字符开头的行.
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |