You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PL/SQL中如何便捷获取数字字符串中的最大值?

逗号分隔数字字符串求最大值的简便方法

针对不同数据库和应用场景,有多种无需手动遍历比较的简便方法:

数据库端处理

MySQL(8.0+)

最简洁的方式是利用JSON_TABLE将字符串转成结构化数据后取最大值:

SELECT MAX(num) AS max_num
FROM your_table,
JSON_TABLE(
    CONCAT('[', your_num_str_field, ']'),
    '$[*]' COLUMNS(num INT PATH '$')
) AS jt;

也可以用递归CTE拆分字符串(兼容低版本):

WITH RECURSIVE split_nums AS (
    SELECT 
        SUBSTRING_INDEX(your_num_str_field, ',', 1) AS num,
        SUBSTRING(your_num_str_field FROM LENGTH(SUBSTRING_INDEX(your_num_str_field, ',', 1)) + 2) AS rest
    FROM your_table
    WHERE your_num_str_field != ''
    UNION ALL
    SELECT 
        SUBSTRING_INDEX(rest, ',', 1) AS num,
        SUBSTRING(rest FROM LENGTH(SUBSTRING_INDEX(rest, ',', 1)) + 2) AS rest
    FROM split_nums
    WHERE rest != ''
)
SELECT MAX(CAST(num AS UNSIGNED)) AS max_num FROM split_nums;

PostgreSQL

直接将字符串转成数组后使用array_max函数:

SELECT array_max(string_to_array(your_num_str_field, ',')::INT[]) AS max_num FROM your_table;

或者拆分后聚合:

SELECT MAX(CAST(num AS INT)) AS max_num
FROM your_table, unnest(string_to_array(your_num_str_field, ',')) AS num;

SQL Server

利用STRING_SPLIT函数拆分后取最大值:

SELECT MAX(CAST(value AS INT)) AS max_num
FROM your_table
CROSS APPLY STRING_SPLIT(your_num_str_field, ',');

Oracle(12c+)

通过JSON函数将字符串转成结构化数据:

SELECT MAX(CAST(num AS INT)) AS max_num
FROM your_table,
JSON_TABLE(
    '["' || REPLACE(your_num_str_field, ',', '","') || '"]',
    '$[*]' COLUMNS(num INT PATH '$')
) AS jt;

应用层处理

如果在应用代码中处理,比如Python:

num_str = "50,40,60,10,0,4"
max_num = max(map(int, num_str.split(',')))

Java:

String numStr = "50,40,60,10,0,4";
int maxNum = Arrays.stream(numStr.split(","))
                   .mapToInt(Integer::parseInt)
                   .max()
                   .orElse(0);

内容的提问来源于stack exchange,提问作者vswindell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:12:36