【发布时间】:2011-09-15 06:08:06
【问题描述】:
我有一个包含以下数据集的表格
ID (VARCHAR2 field)
D001
D002
D010
D0012
我在这个字段中使用max()。
Select max(ID) from <table-name>;
它返回D010 作为结果。
为什么结果不是D0012?
【问题讨论】:
-
是
varchar字段,为什么会被排序为数字?
我有一个包含以下数据集的表格
ID (VARCHAR2 field)
D001
D002
D010
D0012
我在这个字段中使用max()。
Select max(ID) from <table-name>;
它返回D010 作为结果。
为什么结果不是D0012?
【问题讨论】:
varchar字段,为什么会被排序为数字?
你得到D010,因为按字母顺序,D010 在D0012 之后,或者换一种说法,D01 在D00 之后,因此任何D01x 都在以D00x 开头的任何东西之后。
【讨论】:
按照您的期望,下面的代码对我有用
select max(to_number(regexp_substr(id, '\d+'))) id from <yourtable>;
【讨论】:
这应该可以工作
Select MAX(ID) from table where IsNumeric(ID) = 1 ;
【讨论】:
这肯定行得通。
select MAX(CAST(REPLACE(REPLACE(ID, 'D', ''), '', '') as int)) from <table-name>
【讨论】:
首先 Varchar 需要 Casted as int 才能选择为 MAX。使用以下查询:
select max(CAST(ID as signed)) as max_id from <table-name>;
【讨论】:
选择 *
来自<TABLE_NAME>
ORDER BY CAST(ID十进制(10, 3)) DESC
【讨论】: