0

可能重复:
MySQL - 如果它以数字或特殊字符
开头 选择以数字开头的值

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

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

不知道该怎么做。

4

4 回答 4

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
于 2013-01-21T20:59:45.173 回答
2

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

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

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

而且它会很慢,因为 ORDER BY 不能从索引中受益。

于 2013-01-21T20:59:30.130 回答
0
if title LIKE 'number%' then
    CONCAT(title, '0');
end if;
于 2013-01-21T20:58:19.403 回答
0
if (left(title,1) regexp '[0-9]', title+0, title)

或者

if (title regexp '^[0-9]', title+0, title)
于 2013-01-21T20:59:50.027 回答