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

SQL拆分拼接函数:如何提取地址字段前三个分隔部分?

提取地址字段前3个部分的SQL解决方案

这问题我日常处理字符串需求时经常碰到,不同数据库的函数实现略有差异,给你整理几个主流数据库的可用方案,直接就能套用:

MySQL/MariaDB 实现

最省心的方式是用SUBSTRING_INDEX函数,它专门用来按指定分隔符截取字符串的前N个部分,语法简单直观:

SELECT SUBSTRING_INDEX(address, '.', 3) AS short_address
FROM your_table;

举个实际例子:当address值为AB.CB.2k.SSS.45a时,这个函数会直接返回AB.CB.2k。如果某行地址的分段不足3个(比如只有XY.ZZ),函数会返回整个字符串,不会抛出错误,兼容性很友好。

PostgreSQL 实现

PostgreSQL可以通过数组转换的思路来实现:先把字符串拆分成数组,提取前3个元素后再拼接回字符串:

SELECT ARRAY_TO_STRING(STRING_TO_ARRAY(address, '.')[1:3], '.') AS short_address
FROM your_table;

拆解一下逻辑:STRING_TO_ARRAY(address, '.')把地址按.拆成数组,[1:3]选取数组的第1到第3个元素(PostgreSQL数组索引从1开始),最后用ARRAY_TO_STRING把这三个元素用.重新拼接成完整的短地址。

SQL Server 实现

SQL Server没有直接的SUBSTRING_INDEX函数,但可以嵌套CHARINDEX来定位第三个.的位置,再截取前面的内容:

SELECT SUBSTRING(
    address,
    1,
    CHARINDEX('.', address, CHARINDEX('.', address, CHARINDEX('.', address, 1)+1)+1) - 1
) AS short_address
FROM your_table;

如果你的SQL Server版本是2016及以上,也可以用STRING_SPLIT配合窗口函数实现,但上面的嵌套CHARINDEX方法兼容性更强,不用考虑版本限制。同样,当地址分段不足3个时,这个语句会返回整个原始地址。

内容的提问来源于stack exchange,提问作者A.DS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:03:28