2014-04-24 24 views
0

我需要按以下方式订购varchar列:100,110,120,1490,1495,1495.1,1495.2,1495.3等。通过RegExp排序在MySQL中没有函数?

在另一个问题的帮助下,我创建了这个功能:

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修复此错误。”我的老板说,如果它破坏了某些东西,我们无法进行更新,所以我希望有人能帮助我在没有功能的情况下实现同样的功能。谢谢!

+1

如何[* MySQL的顺序varchar字段为整数*](http://stackoverflow.com/questions/1625166/mysql-order-varchar-field-as-integer)和[*如何ORDER BY varchar字段作为号码是多少?*](http://stackoverflow.com/questions/11728683/how-to-order-by-varchar-field-as-number) –

回答

0
ORDER BY ABS(ItemCode) 

这对我有效。谢谢M Khalid。