当我将方括号和%通配符一起使用时,如下所示,MySQL不会选择任何以数字开头的记录.互联网上的许多示例都将其视为正确用法.有什么建议么?在字母(a-d)范围内也不起作用.我正在运行MySQL 3.2
SELECT * FROM customers WHERE lname LIKE '[0-9]%' ORDER BY lname ASC
要么
SELECT * FROM customers WHERE lname LIKE '[a-d]%' ORDER BY lname ASC
解决方法:
尽管我不认为MySQL在带有正LIKE子句的[]中不支持类似[-]的正则表达式字符类(我也找不到relevant documentation),但是MySQL确实具有REGEXP/RLIKE
operator,您可以使用该结构构造正则表达式以实现可比的功能.
SELECT * FROM customers WHERE lname REGEXP '^[0-9]' ORDER BY lname ASC
SELECT * FROM customers WHERE lname REGEXP '^[a-d]' ORDER BY lname ASC
要构建类似于您使用的通配符模式的正则表达式,请从^开始将模式左固定,并使用与您建议的字符类相同的字符[0-9],[a-f].您不需要在其后跟随任何内容,因为%通配符将等效于在初始左定锚字母或数字后加上^ []的任何零个或多个字符的匹配.
当然,您可以将这些语句与逻辑OR组合在一起,或构建匹配任一情况的正则表达式.
SELECT * FROM customers WHERE lname REGEXP '^[a-d]|[0-9]' ORDER BY lname ASC
但是要记住一件事:使用REGEXP时,您可能使用的名称为MySQL will not be able to use any index.
n.b.我相信MS SQL Server supports a syntax与您提出的类似.
标签:sql,mysql,wildcard 来源: https://codeday.me/bug/20191030/1964780.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。