MySQL Regexp无法正常工作

时间:2016-02-18 17:19:01

标签: mysql regex

我有以下查询:

SELECT  `admin_users`.* 
FROM `admin_users` 
WHERE (avatar REGEXP 'avatars/Name-[0-9]+.jpg+')  
ORDER BY `admin_users`.`avatar` 
DESC LIMIT 1

如果我有类似的话,那就没关系了。

  • avatars/Name-5.jpg
  • avatars/Name-6.jpg

但是如果我有,avatars/Name-15.jpg,例如,它在查询中不会返回。

换句话说,它只适用于1位数,而不是更多。我该如何解决?

1 个答案:

答案 0 :(得分:0)

当比较字符串(这是avatar是什么)时,“avatars / Name-1 ...”出现在“avatars / Name-5 ...”之前,只是因为字符串“1”出现在“5”之前。

通过嵌入数字来订购它们是不切实际的。这可以做你想要的,但它非常神秘:

ORDER BY 0 + MID(avatar, 14)

解释

  1. MID将从'avatars / Name-15.jpg'的第14个字符开始,并提取'15 .jpg'。
  2. 0+将获取该字符串,将其转换为数字并传递数字 15.(当字符串变为数字时,只要它看起来像一个字符,就会获取第一个字符因此,0+'abc'会传递0,因为abc开头的任何内容都看起来像数字。)
  3. 如果左侧部分在所有情况下都不是14个字符,那么诀窍就会失败。它可能变得非常复杂,以至于在SQL中“不可能”。