繁体   English   中英

在MySQL中没有功能的按RegExp排序?

[英]Order By RegExp Without Function in MySQL?

我需要按以下方式订购varchar列:100,110,120,1490,1495,1495.1,1495.2,1495.3等。

在另一个问题的帮助下,我创建了以下函数:

    CREATE FUNCTION isNumeric(value VARCHAR(1024))
    RETURNS TINYINT(1) DETERMINISTIC
    RETURN value REGEXP '^(-|\\+)?([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$'; 

然后将其添加到我的查询中:

    ORDER BY isNumeric(ItemCode) DESC, CASE WHEN isNumeric(ItemCode) = 1 THEN CAST(ItemCode as UNSIGNED) ELSE NULL END, ItemCode

效果很好。 不幸的是,当我在实时服务器上尝试此操作时,无法创建该功能。 “ mysql.proc的列数是错误的。应该是20,找到16。使用MySQL 50067创建,现在运行50147。请使用mysql_upgrade修复此错误。” 我的老板说,如果更新破坏了某些内容,我们将无法运行它,因此我希望有人可以在没有功能的情况下帮助我完成同样的事情。 谢谢!

    ORDER BY ABS(ItemCode)

那对我有用。 谢谢哈立德(M Khalid)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM