1

我的列中有以下值,我需要根据它们的名称对它们进行排序。列的数据类型是 VARCHAR2 (25 BYTE)。我的数据是

 Oracle 10g, Oracle 9i, Oracle 11g

当我使用 ORDER BY Name 时,我得到了订单的结果

    Oracle 10g
    Oracle 11g
    Oracle 9i

我该怎么做才能按顺序获取数据,如下所示

    Oracle 9i
    Oracle 10g
    Oracle 11g
4

3 回答 3

1
/* order based on a number in string */
SELECT  str
FROM
(
        SELECT 'Oracle 10g' str FROM DUAL UNION ALL
        SELECT 'Oracle 11g'     FROM DUAL UNION ALL
        SELECT 'Oracle 9i'      FROM DUAL
)
ORDER   BY
        TO_NUMBER(REGEXP_REPLACE(str, '\D'))

/* result */
Oracle 9i
Oracle 10g
Oracle 11g
于 2013-06-12T10:34:13.517 回答
0

编辑:按预期工作

这里我们有字母数字字符。请使用substring功能。

从 table_name order by SUBSTRING (name,0,8) 中选择 column_name

根据您的要求使用升序或降序。

注意:8 是长度,因为 Oracle 和 Space 是它们之间的共同字符。

于 2013-06-11T06:20:19.870 回答
0

你可以试试这个:

SELECT * FROM TABLE_NAME ORDER BY NAME DESC

于 2013-06-11T06:22:37.403 回答