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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:01:18