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

如何在SQLite中按逗号将地址字段拆分为三个独立列

地址字段拆分三列SQL解决方案

你现有代码仅拆分了第一个逗号的前后内容,因此只能得到前两列,要获取第三列州缩写,需要定位到第二个逗号的位置做二次截取,以下是两种可直接使用的实现方案:

方案1:兼容INSTR函数的通用写法(适配MySQL、Oracle、SQLite 3.34.0+等)

通过嵌套INSTR函数定位第二个逗号的位置,完成三段截取,额外添加TRIM函数去除分割后内容前后的多余空格:

SELECT
    -- 截取第一个逗号前的街道信息
    TRIM(SUBSTRING(OwnerAddress, 1, INSTR(OwnerAddress, ',') - 1)) AS address_street,
    -- 截取两个逗号中间的城市信息
    TRIM(SUBSTRING(
        OwnerAddress,
        INSTR(OwnerAddress, ',') + 1,
        INSTR(SUBSTRING(OwnerAddress, INSTR(OwnerAddress, ',') + 1), ',') - 1
    )) AS address_city,
    -- 截取第二个逗号后的州缩写信息
    TRIM(SUBSTRING(
        OwnerAddress,
        INSTR(OwnerAddress, ',') + INSTR(SUBSTRING(OwnerAddress, INSTR(OwnerAddress, ',') + 1), ',') + 1
    )) AS address_state
FROM housing_data;

方案2:支持SUBSTRING_INDEX的简化写法(适配MySQL)

使用SUBSTRING_INDEX函数可以大幅简化截取逻辑,代码可读性更高:

SELECT
    TRIM(SUBSTRING_INDEX(OwnerAddress, ',', 1)) AS address_street,
    TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(OwnerAddress, ',', 2), ',', -1)) AS address_city,
    TRIM(SUBSTRING_INDEX(OwnerAddress, ',', -1)) AS address_state
FROM housing_data;

SUBSTRING_INDEX参数规则:第二个参数为分隔符,第三个参数为正数时取第N个分隔符前的所有内容,为负数时取倒数第N个分隔符后的所有内容。

注意事项

  • 两种方案均默认所有地址为「街道,城市,州」的标准三段结构,且恰好有2个逗号作为分隔符,若存在格式不规范的地址可额外加判断逻辑避免取值报错
  • 其他数据库适配参考:PostgreSQL可使用STRING_TO_ARRAY(OwnerAddress, ',')转数组后按下标取值,SQL Server可使用STRING_SPLIT配合排序后取值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:45:04