ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql-在通配符的SQL语句中将方括号括起来

2019-10-30 03:14:37  阅读:829  来源: 互联网

标签:sql mysql wildcard


当我将方括号和%通配符一起使用时,如下所示,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

Here’s a demonstration.

但是要记住一件事:使用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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有