可能重复:
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)
不知道该怎么做。
答案 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)