我有一个数据模式如下的数据集:
**ColumnName**
a/b
a/b:1
a/b:2
a/b.100
a/b.200
a/b:20
我需要使用 REGEXP 编写一个查询,以便它只从列中提取准确的数据,而不是相似的模式。但是,如果值中有一个点 (.),则应该在父模式中获取它。
以下是上述数据集的场景:
No. PATTERN RESULT
1 "a/b" a/b
a/b.100
a/b.200
2 "a/b:1" a/b:1
3 "a/b:2" a/b:2 (and not a/b:20)
4 "a/b:20" a/b:20
到目前为止,我使用的查询遵循模式 1、2 和 4,但它失败了模式 3。我得到了这两个结果,包括不应选择的结果,如上所示。
以下是我用来执行此操作的查询:
select * from table
where (ColumnName REGEXP '<Pattern>$' or ColumnName REGEXP '<Pattern>[.^0-9]+');
我可以对这个查询做些什么来确保它遵循这种情况下的所有场景?
最佳答案
嗯。我认为打破 上的模式。
做你想做的事:
where substring_index(col, '.', 1) = v_pattern
如果模式可能包含 '.'
,您可能需要:
where (substring_index(col, '.', 1) = v_pattern or
col = v_pattern
)
关于MySQL:REGEXP 模式未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42729948/