MySQL IF以数字X开头,否则执行Y.

时间:2013-01-21 20:54:30

标签: mysql

  

可能重复:
  MySQL - If It Starts With A Number Or Special Character
  Select values that begin with a number

我正在尝试创建一个ORDER BY语句,该语句检查列是否以数字开头,如果是,则应该向列添加+ 0。如果没有,则不会。

像这样IF(title begins with number, title + 0, title)

不知道该怎么做。

4 个答案:

答案 0 :(得分:3)

ORDER BY IF(title REGEXP '^[0-9]',title+0,title)

但是,该表达式将返回一个数值;因为“title + 0”基本上等于“title”(就数值比较而言),我认为这不会达到你想要的效果。

(“+ 0”操作将零值添加到字符串值的前导数字部分,并返回一个数值;因此整个表达式将被计算为数值。这意味着裸“标题”将也是一个数值,如果没有前导数字,它将返回0。

所以,这基本上等同于:

ORDER BY title+0

您实际想要以什么顺序返回标题值?您是否希望按行数字按顺序返回行,然后按标题字符串?

返回

我想你想要在没有前导数字时按字符串值title排序;否则,通过前导数字的数值,然后是标题的字符串值,这样的东西可能会让你更接近你想要的东西:

ORDER BY title REGEXP '^[0-9]', title+0, title

答案 1 :(得分:2)

您可以强制将标题解释为整数并测试它是> = 1:

ORDER BY IF(title+0 >= 1, title+0, title)

但我必须发表评论,这听起来好像你将一列用于两个不同的目的,这在关系数据库设计中是禁忌。

此外它会非常缓慢,因为ORDER BY无法从索引中受益。

答案 2 :(得分:0)

if title LIKE 'number%' then
    CONCAT(title, '0');
end if;

答案 3 :(得分:0)

if (left(title,1) regexp '[0-9]', title+0, title)

if (title regexp '^[0-9]', title+0, title)