我有一张包含以下数据集的表
ID (VARCHAR2 field)
D001
D002
D010
D0012
我在此字段中使用max()
。
Select max(ID) from <table-name>;
结果返回D010
。
为什么结果不是D0012
?
答案 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 ;