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

数据库列中如何截断字符串第三个点后的内容,提取前三部分?

提取IP字符串前三段的实现方法

针对不同数据库,提供以下通用解决方案,完美适配分段位数不固定的场景:

MySQL/MariaDB

直接使用SUBSTRING_INDEX函数,按点分隔符截取左数前3段内容:

SELECT SUBSTRING_INDEX(ip_column, '.', 3) FROM your_table;

示例:输入'123.456.78.9'返回'123.456.78',输入'12.34.56.78'返回'12.34.56'。

SQL Server

方法1:嵌套CHARINDEX定位第三个点

SELECT 
  LEFT(ip_column, CHARINDEX('.', ip_column, CHARINDEX('.', ip_column, CHARINDEX('.', ip_column) + 1) + 1) - 1) 
FROM your_table;

通过三次嵌套CHARINDEX依次定位第1、2、3个点的位置,再用LEFT截取到第三个点前的内容。

方法2:拆分后拼接前三段(SQL Server 2016+适用)

SELECT 
  STRING_AGG(value, '.') WITHIN GROUP (ORDER BY ordinal) AS first_three_segments
FROM 
  your_table t
CROSS APPLY (
  SELECT value, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS ordinal
  FROM STRING_SPLIT(t.ip_column, '.')
) AS splits
WHERE ordinal <=3
GROUP BY t.ip_column;

Oracle

方法1:正则表达式提取

SELECT REGEXP_SUBSTR(ip_column, '^[^.]+\.[^.]+\.[^.]+') FROM your_table;

正则规则^[^.]+\.[^.]+\.[^.]+匹配以三段"非点字符+点/结尾"组成的内容,精准截取前三段。

方法2:INSTR定位截取

SELECT SUBSTR(ip_column, 1, INSTR(ip_column, '.', 1, 3) - 1) FROM your_table;

INSTR(ip_column, '.', 1, 3)定位左数第三个点的位置,SUBSTR截取该位置前的所有内容。

PostgreSQL

通过数组拆分+拼接实现:

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

先将字符串转成数组,取前3个元素后重新用点拼接成字符串。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:30:51