【问题标题】:Oracle SQL MAX() and MIN() with stringOracle SQL MAX() 和 MIN() 带字符串
【发布时间】:2022-11-14 22:32:23
【问题描述】:

我在从数据库中检索 MAX 编号时遇到问题。 问题是数字是字符串格式,因为它们包含下划线。

示例案例: 我在数据库中有 3 个数字:

123456_1, 123456_2, 123456_13,

我想获取的 MAX 数字是 123456_13 (基本上是下划线后最大的),但由于它们是字符串,Oracle 按字母顺序处理它们并按升序排列:

  1. 123456_1
  2. 123456_13
  3. 123456_2

    使 123456_2 成为 MAX。

    如果我不需要通过替换下划线并转换为数字来显示实际的 MAX 或 MIN 数字,这是可能的:

    SELECT
      MAX(TO_NUMBER(REPLACE(number,'_',''))) max_nr,
      MIN(TO_NUMBER(REPLACE(number,'_',''))) min_nr
    FROM
    ...
    

    这将返回 12345613 max_nr 1234561 min_nr 从我的 3 个示例中,但我需要使用下划线获取实际数字并显示它。

    有没有办法做到这一点?

【问题讨论】:

  • 试试ORDER BY TO_NUMBER(REPLACE(number,'_','')))
  • 如果您只想获取第一个条目,或者将您的条件放在 WHERE 子句中。选择号码 FROM...WHERE REPLACE(number,...) = (SELECT MAX(REPLACE(number,...)));

标签: sql database oracle max min


【解决方案1】:

您可以在ORDER BY 语句和FETCH FIRS 1 ROW 中使用REPLACE

select *
from T
order by TO_NUMBER(REPLACE(N,'_','')) desc
fetch first 1 rows only;

SQLize - online editor

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 2020-09-26
    • 2017-08-06
    • 2015-03-05
    • 2019-02-21
    • 1970-01-01
    • 2020-11-22
    相关资源
    最近更新 更多