[英]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.