使用mysql中的正则表达式匹配确切的数字

时间:2013-05-06 11:02:19

标签: mysql regex

我在mysql中查询数据库表,其中数据以下面的格式存储。

示例:

+------------+------------+------------+
| adv_images | start_date | end_date   |  
+------------+------------+------------+
| 21.jpg     | 2013-05-22 | 2013-05-28 |         
| 2.jpg      | 2013-05-22 | 2013-05-28 |        
| 2a.jpg     | 2013-05-22 | 2013-05-28 |   
| 2b.jpg     | 2013-05-22 | 2013-05-28 |  
| 2c.jpg     | 2013-05-22 | 2013-05-28 |
+------------+------------+------------+

还有更多类似格式的数据,如3.jpg,3a.jpg,3b.jpg,41.jpg等。

我正在使用此查询来查询数据库: -

SELECT adv_images WHERE adv_images REGEXP BINARY'^(2+ [a-z]?)';

我的要求是只拉出那些仅以2开头的adv_images(即2.jpg,2a.jpg等)。但它拉21.jpg,22.jpg,22a.jpg等。

我们如何解决它。

4 个答案:

答案 0 :(得分:1)

正如本杰明所指出的,这将是你的完美匹配:

^2([a-zA-Z]?)+\.jpg

含义:

  • 2
  • 开始
  • 后跟零或一个alpha
  • 后跟.jpg

答案 1 :(得分:0)

这可能有所帮助:

SELECT adv_images WHERE adv_images + 0 = 2;

答案 2 :(得分:0)

试试这个

^([2+][a-z]?)\.jpg

所以你的查询变成了

SELECT adv_images WHERE adv_images REGEXP BINARY '^([2+][a-z]?)\.jpg';

答案 3 :(得分:0)

感谢大家尝试这一点,但我找到了解决问题的简单方法。

SELECT adv_images WHERE adv_images REGEXP BINARY'^(2+ [a-z]?)';我正在尝试这个,但现在我刚刚添加了一个'。'在regx中

前 -

SELECT adv_images WHERE adv_images REGEXP BINARY'^(2+ [a-z。]?)';它对我来说非常适合。