MySQL:REGEXP模式无法按预期工作

时间:2017-03-11 00:35:39

标签: mysql sql

我有一个数据模式的数据集如下:

**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]+');

我可以对此查询执行哪些操作以确保它遵循此情况下的所有方案?

2 个答案:

答案 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与模式

的严格比较