数据库列中如何截断字符串第三个点后的内容,提取前三部分?
提取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
相关产品推荐
相关产品推荐

