在VARCHAR字段中使用MAX()

时间:2011-06-15 05:29:03

标签: string oracle sorting

我有一张包含以下数据集的表

ID (VARCHAR2 field)
D001
D002
D010
D0012

我在此字段中使用max()

Select max(ID) from <table-name>;

结果返回D010

为什么结果不是D0012

6 个答案:

答案 0 :(得分:17)

您得到D010,因为按字母顺序,D010来自D0012或另一种方式,D01来自D00,因此任何D01x在任何开始D00x之后出现。

答案 1 :(得分:3)

以下代码根据您的期望为我工作

select max(to_number(regexp_substr(id, '\d+'))) id from <yourtable>;

答案 2 :(得分:0)

这肯定有用。

    select MAX(CAST(REPLACE(REPLACE(ID, 'D', ''), '', '') as int)) from <table-name>

答案 3 :(得分:0)

第一个Varchar需要转换为int才能选择为MAX。使用以下查询:

select max(CAST(ID as signed)) as max_id from <table-name>;

答案 4 :(得分:0)

选择* 来自<TABLE_NAME> 按CAST({ID AS DECIMAL(10,3))DESC排序

答案 5 :(得分:-1)

这应该有效

Select MAX(ID) from table where IsNumeric(ID) = 1 ;