SQL查询:如何匹配列中值作为目标字符串前缀的记录?
解决寻找字符串前缀的SQL查询问题
我来帮你搞定这个SQL查询问题——你之前的思路方向是对的,但LIKE的用法没弄对,导致没得到想要的结果。
核心问题分析
你之前写的WHERE 'AMO200IL351972598764' LIKE MatrixCode缺少了通配符,这种写法只有当MatrixCode的值和目标字符串完全相等时才会匹配,自然找不到那些作为前缀的记录。而CONTAINS是用于全文索引搜索的,并不适合这种前缀匹配的场景。
正确的查询语句
这里有两种可靠的实现方式,都不需要截断目标字符串:
方法1:使用LIKE + 通配符%
这是最直观的前缀匹配写法,通过将MatrixCode和通配符%拼接,让目标字符串只要以MatrixCode的值开头就会被匹配:
SELECT * FROM [t_MO_MatrixCodeMapping] WHERE 'AMO200IL351972598764' LIKE MatrixCode + '%'
如果你的数据库不支持+拼接字符串(比如MySQL),可以换成CONCAT函数:
SELECT * FROM [t_MO_MatrixCodeMapping] WHERE 'AMO200IL351972598764' LIKE CONCAT(MatrixCode, '%')
方法2:使用LEFT函数对比
另一种思路是截取目标字符串的前LEN(MatrixCode)个字符,和MatrixCode直接对比,相等则说明是前缀:
SELECT * FROM [t_MO_MatrixCodeMapping] WHERE LEFT('AMO200IL351972598764', LEN(MatrixCode)) = MatrixCode
效果验证
比如你的表中MatrixCode有AMO200,上述两种方法都会把这条记录筛选出来,因为AMO200是AMO200IL351972598764的前缀;而shampo250、condishioner500则不会被匹配,完全符合你的需求。
内容的提问来源于stack exchange,提问作者S_K
相关产品推荐
相关产品推荐

