在SQL中如何拆分同一列中混合存储的CPT编码与HCPC编码?
实现方案
核心逻辑
- 通过正则匹配区分两类编码:全为数字的判定为CPT编码,包含字母的判定为HCPC编码
- 给两类编码分别按顺序分配行号,通过行号关联实现两列对齐输出
通用SQL示例(支持窗口函数的数据库均可适配)
WITH cpt AS ( SELECT `Procedure Code` AS CPT, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS row_num FROM 你的表名 -- 全数字匹配规则可根据数据库类型替换 WHERE `Procedure Code` REGEXP '^[0-9]+$' ), hcpc AS ( SELECT `Procedure Code` AS HCPC, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS row_num FROM 你的表名 WHERE `Procedure Code` NOT REGEXP '^[0-9]+$' ) SELECT c.CPT, h.HCPC FROM cpt c INNER JOIN hcpc h ON c.row_num = h.row_num;
适配说明
- 如果你需要固定编码排序,可将
ORDER BY (SELECT 1)替换为ORDER BYProcedure Code``或其他业务排序字段,避免不同数据库默认排序差异 - 不同数据库的全数字匹配规则可按需替换:
- SQL Server:替换为
WHERE ISNUMERIC(Procedure Code) = 1或者WHEREProcedure CodeNOT LIKE '%[A-Za-z]%' - Oracle:替换为
WHERE REGEXP_LIKE(Procedure Code, '^[0-9]+$')
- SQL Server:替换为
- 若两类编码数量不一致,可替换为
FULL OUTER JOIN避免丢失数据,缺值位置会返回NULL - 不支持CTE的数据库可直接将两个子查询写到FROM从句中,逻辑完全一致
内容的提问来源于stack exchange,提问作者agloria
相关产品推荐
相关产品推荐

