将 REGEX 与 Sql 语句一起使用


Using REGEX with Sql Statement

我想检查在名为"tag"的列中是否包含使用正则表达式的两位数数字。

我的查询:

$FilterTag="3,2,11"
$sql = "SELECT * FROM table1 WHERE bTown = ? AND REGEXP_LIKE(tag, '.*[$FilterTag]')";

我的桌子:数据库表标签

唯一的问题是我的查询是找到单个字符数字,就像不是告诉我它包含 11,而是告诉我它包含 1。

有什么方法可以对数字字符集进行分组吗?

你的问题不清楚!

所以你想得到标签有3211的条目。

您必须拆分字符串/过滤器3,2,11,然后使用循环生成条件:

$sql = "SELECT * FROM table1 WHERE bTown = ?";
foreach (explode(",", $FilterTag) as $value)
    $sql .= " AND REGEXP_LIKE(tag, ''b$value'b')";

这应该产生以下查询:

SELECT * FROM table1 WHERE bTown = ? 
    AND REGEXP_LIKE(tag, ''b3'b')
    AND REGEXP_LIKE(tag, ''b2'b')
    AND REGEXP_LIKE(tag, ''b11'b')

额外:

要仅允许 1 到 99 之间的数字,请使用以下正则表达式:

'b[1-9][0-9]?'b

演示

要允许两位数字(数字 <10 的前导零)请使用:

'b(0[1-9]|[1-9][0-9])'b

演示

返回包含 2 位数字的所有记录。

select * from table1
where tag REGEXP ('^[0-9]{2}$');