我有一个数据模式的数据集如下:
**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]+');
我可以对此查询执行哪些操作以确保它遵循此情况下的所有方案?
答案 0 :(得分:0)
嗯。我认为打破.
上的模式可以达到你想要的效果:
where substring_index(col, '.', 1) = v_pattern
如果模式可能包含您可能想要的'.'
:
where (substring_index(col, '.', 1) = v_pattern or
col = v_pattern
)
答案 1 :(得分:0)
比较ColumnName的子字符串直到&#39;。&#39;使用模式并使用ColumnName与模式
的严格比较