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