簡體   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