我有一张表格,上面有很多名字,后面跟着一个数字。所有条目都使用相同的语法,但有些名称的数字从 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/