我 在 从 数据 库 中 检索 MAX 数字 时 遇到 了 问题 。 问题 是 这些 数字 是 字符 串 格式 , 因为 它们 包含 下划线 。
示例 案例 :数据 库 里 有 三 个 号码 :
123456_1 、 123456_2 、 123456_13 、
我 想 获取 的 MAX 数字 是 123456_13 ( 基本 上 是 下划线 之后 的 最 大 值 ) , 但 由于 它们 是 字符 串 , Oracle 按 字母 顺序 处理 它们 , 并 按 升序 排序 :
1.小 行星 123456_1
- 123456_13 号 文件
1.小 行星 123456_2
使 123456_2 成为 MAX 。
如果 我 不 需要 通过 替换 下划线 并 转换 为 数字 来 显示 实际 的 MAX 或 MIN 数字 , 这 是 可能 的 :
SELECT
MAX(TO_NUMBER(REPLACE(number,'_',''))) max_nr,
MIN(TO_NUMBER(REPLACE(number,'_',''))) min_nr
FROM
...
中 的 每 一 个
这 将 从 我 的 3 个 示例 中 返回 12345613 max _ nr 1234561 min _ nr , 但 我 需要 获取 带 下划线 的 实际 数字 并 显示 它 。
有 没有 办法 做到 这 一 点 ?
2条答案
按热度按时间aiqt4smr1#
如果要同时获得最小值和最大值,可以使用
keep
语法两次,并按下划线后所有字符的等效数字进行排序:| 最大数量|最小编号|
| - -|- -|
| 123456_13号文件|小行星123456_1|
fiddle
instr(your_number, '_')
给出下划线的位置;substr(your_number, instr(your_number, '_') + 1)
提供下划线后面的所有内容。如果下划线前面的值不总是相同的位数,这将是一个工作,如果你只是删除它可能是一个问题。
hm2xizp92#
可以在
ORDER BY
语句中使用REPLACE
,也可以在FETCH FIRST 1 ROW
SQLize - online editor