【问题标题】:Order By RegExp Without Function in MySQL?MySQL中没有函数的RegExp排序?
【发布时间】:2014-04-25 00:14:28
【问题描述】:

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

【问题讨论】:

标签: mysql sql


【解决方案1】:
    ORDER BY ABS(ItemCode)

这对我有用。谢谢 M Khalid。

【讨论】:

    猜你喜欢
    • 2013-12-07
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2017-06-14
    • 2012-02-05
    • 1970-01-01
    相关资源
    最近更新 更多