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

如何用Perl将MySQL查询的离散ID序列压缩为连续区间格式?

Perl实现离散ID序列的压缩格式化

以下是直接可用的Perl代码,能把逗号分隔的ID列表转换成1001..3000、10675这类格式:

# 假设从数据库获取到的ID字符串
my $id_list = '1001,1002,1003,...,3000,10500,10675,100000';

# 拆分字符串为数组并做数值排序(ID可能乱序,排序是合并连续区间的前提)
my @ids = sort { $a <=> $b } split /,/, $id_list;

my @result;
my ($start, $prev);

foreach my $id (@ids) {
    if (!defined $start) {
        $start = $prev = $id;
        next;
    }
    # 当前ID和前一个连续,更新结束值
    if ($id == $prev + 1) {
        $prev = $id;
    } else {
        # 遇到断档,将当前区间存入结果
        push @result, $start == $prev ? $start : "$start..$prev";
        $start = $prev = $id;
    }
}

# 处理最后一个未写入的区间
push @result, $start == $prev ? $start : "$start..$prev" if defined $start;

# 用中文顿号拼接成最终格式化字符串
my $formatted = join '、', @result;
print $formatted;

关键说明:

  • 必须做数值排序:因为你提到ID存在乱序情况(比如100000跳至10500),只有排序后才能正确识别连续序列
  • 遍历过程中跟踪连续区间的起始和结束值,遇到非连续ID就输出当前区间
  • 最终用中文顿号拼接结果,完全匹配你需要的格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:20:58