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

如何在oracle中查找字母数字字段的最大值?,oracle,max,varchar,alphanumeric,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_日期前ID组的最大值 SELECT TST_DATE,MAX(ID) from EMP group by TST_DATE; TST_DATE MAX(ID) 05/12/2015 BAB0 07/12/20

我的数据如下,ID为VARCHAR2类型

表格名称:EMP

ID    TST_DATE
A035     05/12/2015
BAB0     05/12/2015
701    07/12/2015
81     07/12/2015
我使用下面的查询来获取TST_日期前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。

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

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列的大小。

当然它会返回81,因为
'8'
大于
'701'
字符串使用获取错误ORA-01722无效数字错误进行排序执行查询时,请从EMP ORDER BY中选择TST_DATE,ID,TO_Number(ID,'XXXXXXXXXXXXX')@MidhunKrishna-柱的大小是多少,其中最长的值是多少?是否有任何值不是字母数字?感谢您的回复Alex..该列是一个varchar列,其长度为4。这些值是字母数字和数字的混合。例如,001045571、A870、B787,81etc@MidhunKrishna-是否
SELECT*from EMP WHERE NOT REGEXP_LIKE(ID,“^[0-9A-F]*$”)
找到任何实际上不是数字的东西?是的,Alex..返回两行。。ID值为BZB0、DZB0