繁体   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