在MySQL中没有函数的RegExp命令?

时间:2014-04-24 15:52:21

标签: mysql sql

我需要按以下方式订购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来修复此错误。”我的老板说我们不能运行更新以防万一它会破坏,所以我希望有人能帮助我在没有功能的情况下实现同样的目标。谢谢!

1 个答案:

答案 0 :(得分:0)

    ORDER BY ABS(ItemCode)

这对我有用。谢谢M Khalid。