SQL Server使用CHARINDEX函数提取分隔列第3与第4个冒号之间的值
SQL提取指定位置冒号间内容解决方案
你当前的代码使用固定数值-6计算截取长度属于硬编码,只能匹配特定长度的输入,无法通用适配所有场景。可通过动态计算冒号位置的方式修正:
通用嵌套CHARINDEX实现(兼容所有支持CHARINDEX的数据库)
SELECT SourceID, SUBSTRING( SourceID, -- 取第3个冒号的下一个字符作为截取起点 CHARINDEX(':', SourceID, CHARINDEX(':', SourceID, CHARINDEX(':', SourceID) + 1) + 1) + 1, -- 动态计算截取长度:第4个冒号位置 - 第3个冒号位置 -1 CHARINDEX(':', SourceID, CHARINDEX(':', SourceID, CHARINDEX(':', SourceID, CHARINDEX(':', SourceID) + 1) + 1) + 1) - CHARINDEX(':', SourceID, CHARINDEX(':', SourceID, CHARINDEX(':', SourceID) + 1) + 1) - 1 ) AS Column_C FROM temp.table
简化写法(支持字符串拆分函数的数据库可使用)
如果所用数据库支持STRING_SPLIT(SQL Server)、split_part(PostgreSQL/Redshift)等拆分函数,代码会更简洁易读:
-- PostgreSQL/Redshift示例 SELECT SourceID, split_part(SourceID, ':', 4) AS Column_C FROM temp.table
-- SQL Server示例 SELECT SourceID, (SELECT value FROM STRING_SPLIT(SourceID, ':') ORDER BY (SELECT 1) OFFSET 3 ROWS FETCH NEXT 1 ROW ONLY) AS Column_C FROM temp.table
内容的提问来源于stack exchange,提问作者gfernandes
相关产品推荐
相关产品推荐

