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

如何从TableA的Years列提取每行的最新年份?

提取混合分隔符年份列的最新年份解决思路

核心逻辑分三步走,适配主流关系型数据库:

通用步骤

  1. 统一分隔符:先把列中混合的分号(;)和逗号(,)替换成同一种,比如全部换成逗号,确保字符串格式一致
  2. 拆分年份字符串:将统一后的字符串拆分成单个年份值的集合
  3. 提取最大值:把每个年份转成数值类型,取最大值就是最新年份

各数据库具体实现示例

MySQL(8.0+)

如果你的MySQL版本支持STRING_SPLIT(8.0.19及以上),可以用最简单的写法:

SELECT 
    Years,
    MAX(CAST(s.value AS UNSIGNED)) AS LatestYear
FROM TableA
JOIN STRING_SPLIT(REPLACE(Years, ';', ','), ',') s
GROUP BY Years;

如果版本较低,用递归CTE生成数字序列配合正则拆分:

WITH RECURSIVE nums(n) AS (
    SELECT 1 UNION ALL SELECT n+1 FROM nums WHERE n <= 10
)
SELECT 
    t.Years,
    MAX(CAST(REGEXP_SUBSTR(REPLACE(t.Years, ';', ','), '[^,]+', 1, nums.n) AS UNSIGNED)) AS LatestYear
FROM TableA t
JOIN nums ON nums.n <= LENGTH(REPLACE(t.Years, ';', ',')) - LENGTH(REPLACE(REPLACE(t.Years, ';', ','), ',', '')) + 1
GROUP BY t.Years;

SQL Server(2016+)

利用STRING_SPLIT函数快速拆分:

SELECT 
    t.Years,
    MAX(CAST(s.value AS INT)) AS LatestYear
FROM TableA t
CROSS APPLY STRING_SPLIT(REPLACE(t.Years, ';', ','), ',') s
GROUP BY t.Years;

PostgreSQL

用STRING_TO_ARRAY和UNNEST组合拆分:

SELECT 
    t.Years,
    MAX(CAST(s.year AS INT)) AS LatestYear
FROM TableA t
CROSS JOIN UNNEST(STRING_TO_ARRAY(REPLACE(t.Years, ';', ','), ',')) AS s(year)
GROUP BY t.Years;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:05:33