php - LIKE 查询中的数字通配符?

标签 php mysql sql

我有一张表格,上面有很多名字,后面跟着一个数字。所有条目都使用相同的语法,但有些名称的数字从 1 到 99

例子:

john 1
john 2
john 3
john smith 1
john smith 2

在此示例中,我尝试选择所有“john”条目

SELECT * FROM my_table WHERE name LIKE 'john %'

问题是它还会从“john smith”中选择条目。我怎样才能避免这种情况?是否可以使用某种通配符来做类似的事情:

SELECT * FROM my_table WHERE name LIKE 'john [0-9]'

最佳答案

使用 REGEXP看起来最简单的查询是:

select * from tablename where name REGEXP '^john smith [[:digit:]]{1,2}$';

这会将表达式限制为最多 2 位数字,从而有效地将其限制为 0-99。

或者

select * from tablename where name REGEXP '^john smith [[:digit:]]+$';

不会将其限制为 0-99,但允许空格后的任意数字组合。

请注意,如果您不在开头包含 ^,则允许使用诸如“x john smith 2”之类的内容。如果您不在末尾包含 $,则允许使用“john smith 2 x”。

要捕获 john 和 john smith 需要更像这样的东西:

select * from tablename where name REGEXP '^john [[:alpha:]]{0,}[[:space:]]{0,1}[[:digit:]]{1,2}$' ;

{n,n} 是元素重复的最小和最大次数。因此,对于“john”,我们不会有这个 alpha 元素,但对于“john smith”,我们会有一组字母,因此 {0,} 表示最少 0 个字母字符,没有最大值。空间也是如此,因为使用“john”我们不会有这个空间。但可能我们想将此处可以出现的空格数限制为 1,因此包含最大部分 {0,1}

关于php - LIKE 查询中的数字通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25252400/

相关文章:

mysql - 是否可以创建 "foreign key pair"? - SQL

php - 在 php 文件中使用 php 更改选定的选项卡(li 元素)颜色

javascript - 有什么办法可以在用户登录网站后获取用户在facebook上喜欢的书籍的照片吗?

mysql - SQL查询查找3个月的数据

mysql - 如何在具有特定别名的表上正确选择 MySql 函数值?

mysql - 如何在sql中添加具有相同电子邮件的级别的值

php - 来自超出范围的另一个查询结果的 SQL 查询

php - 如何更新 Laravel Eloquent 列强制转换为集合

sql - 从日期范围中检索可用日期

php - SQL 连接查询 View 在 Yii2 中不起作用