【问题标题】:Using MAX() in VARCHAR Field在 VARCHAR 字段中使用 MAX()
【发布时间】:2011-09-15 06:08:06
【问题描述】:

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

ID (VARCHAR2 field)
D001
D002
D010
D0012

我在这个字段中使用max()

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

它返回D010 作为结果。

为什么结果不是D0012

【问题讨论】:

标签: string oracle sorting


【解决方案1】:

你得到D010,因为按字母顺序,D010D0012 之后,或者换一种说法,D01D00 之后,因此任何D01x 都在以D00x 开头的任何东西之后。

【讨论】:

【解决方案2】:

按照您的期望,下面的代码对我有用

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

【讨论】:

    【解决方案3】:

    这应该可以工作

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

    【讨论】:

      【解决方案4】:

      这肯定行得通。

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

      【讨论】:

        【解决方案5】:

        首先 Varchar 需要 Casted as int 才能选择为 MAX。使用以下查询:

        select max(CAST(ID as signed)) as max_id from &lt;table-name&gt;;

        【讨论】:

          【解决方案6】:

          选择 * 来自&lt;TABLE_NAME&gt; ORDER BY CAST(ID十进制(10, 3)) DESC

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-16
            • 2012-03-21
            • 1970-01-01
            相关资源
            最近更新 更多