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

如何在MySQL中提取多行文本字段每行的最后一个单词?

解决MySQL多行字段提取每行最后一个单词(VIN)并排序的问题

核心思路

要处理字段内换行分隔的多行文本,需先将多行拆分为独立行,再提取每行的最后一个单词(即VIN),最后按VIN排序输出。

具体实现方案

1. 使用递归CTE拆分多行(MySQL 8.0+支持)

递归CTE可以高效拆分换行分隔的内容,再提取每行的VIN:

WITH RECURSIVE split_lines AS (
    -- 初始化:拆分第一条记录的第一行
    SELECT 
        id,
        SUBSTRING_INDEX(MakesModels, '\n', 1) AS line,
        SUBSTRING(MakesModels, LENGTH(SUBSTRING_INDEX(MakesModels, '\n', 1)) + 2) AS remaining
    FROM quotes
    WHERE MakesModels IS NOT NULL AND MakesModels != ''
    
    UNION ALL
    
    -- 递归拆分剩余行
    SELECT 
        id,
        SUBSTRING_INDEX(remaining, '\n', 1) AS line,
        SUBSTRING(remaining, LENGTH(SUBSTRING_INDEX(remaining, '\n', 1)) + 2) AS remaining
    FROM split_lines
    WHERE remaining IS NOT NULL AND remaining != ''
)
SELECT 
    SUBSTRING_INDEX(TRIM(line), ' ', -1) AS vin,
    line AS full_vehicle_info
FROM split_lines
ORDER BY vin ASC;

注:如果字段内的换行符是\r\n,请把代码中的+2改为+3(\r\n占2个字符,加1是跳过换行符本身)。

2. 兼容低版本MySQL的方案(无CTE支持)

如果你的MySQL版本低于8.0,可以借助数字辅助表来拆分多行:

  • 先创建一个数字表(覆盖字段内最多行数,比如1到100):
CREATE TABLE numbers (n INT PRIMARY KEY);
INSERT INTO numbers VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),...,(100);
  • 拆分并提取VIN:
SELECT 
    SUBSTRING_INDEX(TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(q.MakesModels, '\n', n.n), '\n', -1)), ' ', -1) AS vin,
    SUBSTRING_INDEX(SUBSTRING_INDEX(q.MakesModels, '\n', n.n), '\n', -1) AS full_vehicle_info
FROM quotes q
JOIN numbers n ON n.n <= LENGTH(q.MakesModels) - LENGTH(REPLACE(q.MakesModels, '\n', '')) + 1
WHERE q.MakesModels IS NOT NULL AND q.MakesModels != ''
ORDER BY vin ASC;

示例输出

针对你提供的示例数据,执行上述代码后会得到如下结果:

vin                  full_vehicle_info
1G6DJ8E37C0181444    2013 Porsche 1G6DJ8E37C0181444
1GYFK26259R997864    2013 Isuzu Box Truck 1GYFK26259R997864
KNALN4D79E5857681    1984 Chevrolet Impala 2-Door Hardtop KNALN4D79E5857681
SAJWA0FAXAH271577    2021 Nissan Leaf Sedan SAJWA0FAXAH271577
WAUDF48H97A796136    2007 Mercury WAUDF48H97A796136
WAUSF78E38A883031    2007 Honda Accord Sedan WAUSF78E38A883031
WVGAV7AX1FW055522    2003 Pontiac Grand Prix Hardtop WVGAV7AX1FW055522

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:32:48