繁体   English   中英

在Oracle SQL中提取列值的特定部分

[英]Extracting specific part of column values in Oracle SQL

我想提取列值的特定部分。 目标列及其值如下所示

TEMP_COL
---------------
DESCOL 10MG
TEGRAL 200MG 50S
COLOSPAS 135MG 30S

结果列应如下所示

RESULT_COL
---------------
10MG
200MG
135MG

可以使用正则表达式来完成:

SELECT regexp_substr(TEMP_COL, '[0-9]+MG')
FROM the_table;

请注意,这是区分大小写的,并且始终返回第一个匹配项。

我可能会使用REGEXP_SUBSTR()而不是基本函数来实现此目的,因为处方文本的结构因记录而异。

SELECT TRIM(REGEXP_SUBSTR(TEMP_COL, '(\s)(\S*)', 1, 1))
FROM yourTable

模式(\\s)(\\S*)将匹配一个空格,后跟任意数量的非空格字符。 在所有情况下,这都应与第二项匹配。 我们使用TRIM()删除匹配并返回的前导空格。

您如何知道要提取的部分? 您怎么知道它的开始和结束? 使用空格?

如果是这样,您可以使用substr剪切数据,并使用instr查找空白。

例:

select substr(tempcol, -- string
              instr(tempcol, ' ', 1), -- location of first white-space 
              instr(tempcol, ' ', 1, 2) - instr(tempcol, ' ', 1))  -- length until next space
from dual

另一个解决方案是使用regexp_substr (但是,如果您有很多行,则性能可能会更难):

SELECT REGEXP_SUBSTR (tempcol, '(\S*)(\s*)', 1, 2)
FROM dual;

编辑:修复了正则表达式,使其包含解析后的文本后没有空格的表达式。 对于那个很抱歉.. ;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM