我有如下数据,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。
答案 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列的大小。