如何在oracle中找到字母数字字段的最大值?

时间:2015-06-11 09:48:32

标签: oracle max varchar alphanumeric

我有如下数据,ID是VARCHAR2类型

表名:EMP

ID    TST_DATE
A035     05/12/2015
BAB0     05/12/2015
701    07/12/2015
81     07/12/2015

我使用以下查询来获取TST_DATE的最大ID组。

SELECT TST_DATE,MAX(ID) from EMP group by TST_DATE;

TST_DATE     MAX(ID)
05/12/2015    BAB0 
07/12/2015    81

在第二行中它返回81而不是701。

1 个答案:

答案 0 :(得分:2)

要用数字而不是字典顺序对表示(十六进制)数字的字符串进行排序,您需要将它们转换为实际数字:

SELECT TST_DATE, ID, TO_NUMBER(ID, 'XXXXXXXXXX') from EMP
ORDER BY TO_NUMBER(ID, 'XXXXXXXXXX');

TST_DATE   ID                TO_NUMBER(ID,'XXXXXXXXXX')
---------- ---- ---------------------------------------
07/12/2015 81                                       129
07/12/2015 701                                     1793
05/12/2015 A035                                   41013
05/12/2015 BAB0                                   47792

您可以在max()中使用该数字形式,然后转换回十六进制字符串进行显示:

SELECT TST_DATE,
  TO_CHAR(MAX(TO_NUMBER(ID, 'XXXXXXXXXX')), 'XXXXXXXXXX')
from EMP group by TST_DATE;

TST_DATE   TO_CHAR(MAX
---------- -----------
07/12/2015         701
05/12/2015        BAB0

当然,格式模型中有适当数量的X;多少取决于varchar2列的大小。