如何用SQL提取类HL7格式字符串中第3与第4个|间的内容
提取类HL7字符串中指定分隔区间的SQL实现
针对你提供的类HL7格式字符串,要提取第3个和第4个|之间的内容(如示例中的ACT=10968),不同SQL方言的实现如下:
MySQL/MariaDB
利用SUBSTRING_INDEX函数嵌套实现:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(your_column, '|', 4), '|', -1) AS act_field FROM your_table;
逻辑说明:先截取前4个|分隔的片段,再从该片段中提取最后一个|之后的内容,即为目标字段。
SQL Server
方法1(SQL Server 2016+):使用STRING_SPLIT
SELECT value AS act_field FROM your_table CROSS APPLY STRING_SPLIT(your_column, '|') ORDER BY (SELECT NULL) OFFSET 3 ROWS FETCH NEXT 1 ROW ONLY;
注意:
STRING_SPLIT默认不保证顺序,若需严格按原字符串顺序,建议使用方法2。
方法2:嵌套CHARINDEX与SUBSTRING
SELECT SUBSTRING(your_column, -- 定位第3个|的位置,加1得到目标内容起始点 CHARINDEX('|', your_column, CHARINDEX('|', your_column, CHARINDEX('|', your_column) + 1) + 1) + 1, -- 计算目标内容长度:第4个|位置 - 第3个|位置 -1 CHARINDEX('|', your_column, CHARINDEX('|', your_column, CHARINDEX('|', your_column, CHARINDEX('|', your_column) + 1) + 1) + 1) - CHARINDEX('|', your_column, CHARINDEX('|', your_column, CHARINDEX('|', your_column) + 1) + 1) - 1) AS act_field FROM your_table;
PostgreSQL
通过STRING_TO_ARRAY将字符串转为数组后直接取索引:
SELECT (STRING_TO_ARRAY(your_column, '|'))[4] AS act_field FROM your_table;
逻辑说明:PostgreSQL数组索引从1开始,第4个元素即为第3个和第4个|之间的内容。
Oracle
使用REGEXP_SUBSTR正则匹配提取:
SELECT REGEXP_SUBSTR(your_column, '[^|]+', 1, 4) AS act_field FROM your_table;
逻辑说明:正则[^|]+匹配所有非|的字符片段,从第1位开始取第4个匹配结果。
内容的提问来源于stack exchange,提问作者Christophe Wybo
相关产品推荐
相关产品推荐

