ORDER BY包含字符和数字

时间:2013-06-11 06:05:45

标签: sql sql-order-by varchar

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

 Oracle 10g, Oracle 9i, Oracle 11g

当我使用ORDER BY Name时,我得到的结果是

    Oracle 10g
    Oracle 11g
    Oracle 9i

如何按顺序获取数据

    Oracle 9i
    Oracle 10g
    Oracle 11g

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

编辑:按预期工作

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

  

通过 SUBSTRING (名称,0,8)从table_name中选择column_name

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

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

答案 2 :(得分:0)

你可以试试这个:

SELECT * FROM TABLE_NAME ORDER BY NAME DESC