簡體   English   中英

在SQL中提取特定字符串

[英]Extracting Particular String in SQL

我需要使用Oracle中的SQL從不同的字符串中提取或保留某些字符。 我使用了SUBSTR功能,但這並不適用於所有情況。

示例:值如下所示:

B2B_BID-XSKU957109
B2B_BID-SKU340535
B2B-SKU342345
B2B_BID-SKU340020201

結果我想:

SKU957109
SKU340535
SKU342345
SKU340020201

所以它只是不是最后10個字符,但我只想要有字符串'SKU'的部分和跟隨它的數字。 我已經舉了各種例子。 謝謝

你可以通過substr()instr()reverse()得到你想要的東西:

select substr(val, 1-instr(reverse(val), '-'))
from (select 'B2B_BID-XSKU957109' as val from dual) t

上面似乎回答了關於在最后一次之后得到這些東西的一個稍微不同的問題- 要獲得最后一個SKU的東西:

select substr(val, instr(val, 'SKU'))
from (select 'B2B_BID-XSKU957109' as val from dual) t

是一個小小的SQL小提琴。

固定令牌

如果您嘗試提取的令牌是固定長度並且始終位於同一位置,則可以使用帶負索引的substr函數:

select substr('123456',-1,6) from dual;

S
-
6

select substr('123456',-6,6) from dual;

SUBSTR
------
123456

在你的情況下,似乎令牌具有可變長度。

可變長度令牌

如果您嘗試提取的字符串未修復,則無法使用傳統SQL或簡單的substr函數執行此操作。 你可以使用regexp_substr 在后一種情況下,除非你真的需要一些異乎尋常的理由在Oracle中處理你的字符串,我建議你在應用程序中這樣做(或仔細仔細檢查regexp命中Oracle性能)。

提出的解決方案

SELECT REGEXP_SUBSTR('B2B_BID-SKU340020201','SKU[0-9]+') FROM DUAL;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM