首页 / MYSQL / 替代Mysql中的LIKE子句
替代Mysql中的LIKE子句
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了替代Mysql中的LIKE子句,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1605字,纯文字阅读大概需要3分钟。
内容图文
![替代Mysql中的LIKE子句](/upload/InfoBanner/zyjiaocheng/900/5c94944fadbe4babb52bae5187c2da8b.jpg)
我的数据库表中有一个存储类别的文件.我按以下格式存储类别:
1,12,15
现在,当我尝试搜索类别1的产品时,
我在我的查询中使用LIKE子句,例如
where(prod_catg LIKE%1,%或prod_catg LIKE%1%或prod_catg LIKE%,1%)
这将返回所有三个类别1,12和15的产品.相反,我只想要第1类产品.
我也试过IN子句但没有找到结果.
任何人都可以建议我一些其他选择.
解决方法:
prod_catg LIKE '1,%' --matches when 1 is the first category
OR prod_catg LIKE '%,1,%' --matches when 1 is somewhere in the middle
OR prod_catg LIKE '%,1' --matches 1 when is the last category
无论如何,你最好通过在product(main)表上添加一个类别表及其引用来重构你的模式
编辑
另一种解决这个问题的方法是使用REGEXP,这将导致更短的WHERE子句(这是我以前用来测试的):
DECLARE @regexp VARCHAR(100);
SET @regexp = '^1,.*|.*,1$|.*,1,.*';
SELECT
'1,11,15,51,22,31' REGEXP @regexp AS test1,
'51,11,15,1,22,31' REGEXP @regexp AS test2,
'11,15,51,22,31,1' REGEXP @regexp AS test3,
'7,11,15,51,22,31' REGEXP @regexp AS test4,
'51,11,15,7,22,31' REGEXP @regexp AS test5,
'11,15,51,22,31,7' REGEXP @regexp AS test6;
这将使你的prod_catg与正则表达式匹配’^ 1,.* |.*,1 $|.*,1,.*’returnig 1(TRUE)如果匹配,否则为0(FALSE).
然后您的WHERE子句将如下所示:
WHERE prod_catg REGEXP '^1,.*|.*,1$|.*,1,.*'
正则表达式的解释:
^1,.* --matches 1 at the beginning of a string followed by a `,` and any other char
.*,1$--matches 1 at the end of a string preceded by a `,` and any other char
.*,1,.* --matches 1 between two `,` which are sourrounded by any other chars
| --is the OR operator
我确信这个正则表达式可以更加紧凑,但我对正则表达式并不是那么好
很明显,您可以在正则表达式中更改您要查找的类别(尝试在上面的示例中将7替换为7)
内容总结
以上是互联网集市为您收集整理的替代Mysql中的LIKE子句全部内容,希望文章能够帮你解决替代Mysql中的LIKE子句所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。