如何在oracle中对varchar值进行排序

时间:2015-06-24 16:18:40

标签: oracle oracle10g oracle-sqldeveloper plsqldeveloper

我想知道如何对递增或递减的varchar值进行排序。

这是我的领域和价值观 Filling_s_no varchar2;

表:

Id  Filling_s_no    name
1   1.1.1            X
1   1.1.10           X
1   1.1.5            X
1   1.1.2            X
1   1.2.1            X
1   1.2.0            X

现在我想按照这种格式对表格进行排序

Id  Filling_s_no    name
1   1.1.1            X
1   1.1.2            X
1   1.1.5            X
1   1.1.10           X
1   1.2.0            X
1   1.2.1            X

我尝试使用此查询但无法获得解决方案。

select * 
  from TCD_EX_Tab 
 where id=1 
 order by Filling_s_no ASC;

1 个答案:

答案 0 :(得分:1)

以下查询将满足您的需求:

SELECT ID, FILLING_S_NO, NAME
  FROM TCD_EX_TAB
  where id=1 
  order BY TO_NUMBER(REGEXP_SUBSTR(filling_s_no, '[0-9]+', 1, 1)),
           TO_NUMBER(REGEXP_SUBSTR(filling_s_no, '[0-9]+', 1, 2)),
           TO_NUMBER(REGEXP_SUBSTR(filling_s_no, '[0-9]+', 1, 3));

要解决的问题是需要将文本字符串的组件转换为数字,以便按照您的需要进行排序。我们使用正则表达式来挑选字符串的每个子元素,然后将这些子元素转换为NUMBER类型以进行排序。

祝你好运。