我需要使用Oracle中的SQL从不同的字符串中提取或保留某些字符。我使用了SUBSTR功能,但这并不适用于所有情况。
示例:值如下:
B2B_BID-XSKU957109
B2B_BID-SKU340535
B2B-SKU342345
B2B_BID-SKU340020201
我想要的结果:
SKU957109
SKU340535
SKU342345
SKU340020201
所以它不是最后10个字符,但我只想要字符串'SKU'和跟随它的数字的部分。我已经举了各种例子。感谢
答案 0 :(得分:2)
您可以使用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
Here是一个小小的SQL小提琴。
答案 1 :(得分:1)
如果您尝试提取的令牌是固定长度且始终位于同一位置,则可以使用带有否定索引的substr
功能:
select substr('123456',-1,6) from dual;
S
-
6
select substr('123456',-6,6) from dual;
SUBSTR
------
123456
在你的情况下,似乎令牌的长度可变。
如果您尝试提取的字符串未修复,则无法使用传统SQL或简单substr
功能执行此操作。您可以使用regexp_substr
。在后一种情况下,除非您确实需要一些异乎寻常的理由在Oracle中处理您的字符串,否则我建议您在应用程序中执行此操作(或仔细检查仔细对Oracle演出的正则表达式。
SELECT REGEXP_SUBSTR('B2B_BID-SKU340020201','SKU[0-9]+') FROM DUAL;