在SQL中剥离变量的特定部分

时间:2014-10-29 00:15:47

标签: sql string oracle

我有一个变量,我动态存储URL

对于Eg。一个= “https://myaccessdev.searshc.com/aveksa/main?Oid=1&ReqType=GetPage&ObjectClass=com.aveksa.gui.objects.workflow.GuiWorkflowJob&WFObjectID=3478:WPDS”

我想从整个字符串中删除“:WDPS”之前的最后一个数字。

在SQL中有没有办法呢

3 个答案:

答案 0 :(得分:2)

  

我想在"之前删除数字[...]:WDPS"从整个字符串。

这是REGEXP_REPLACE的完美匹配:

with test_data as
 (select 'https://myaccessdev.searshc.com/aveksa/main?Oid=1&ReqType=GetPage&ObjectClass=com.aveksa.gui.objects.workflow.GuiWorkflowJob&WFObjectID=3478:WPDS' str
  from dual)

select REGEXP_REPLACE(str, '.*=([0-9]*):WPDS.*', '\1') from test_data
--                         ^^^^^^^^^^^^^^^^^^^^  ^^^^
--       replace everything before and after       by the first capturing
--                         the target string       group (i.e.: the sequence between
--                                                 parenthesis in the regular expression)

产:

3478

请参阅http://sqlfiddle.com/#!4/d41d8/37095了解即时演示。

答案 1 :(得分:0)

试试这个

DECLARE @string varchar(255) = 'https://myaccessdev.searshc.com/aveksa/main?Oid=1&ReqType=GetPage&ObjectClass=com.aveksa.gui.objects.workflow.GuiWorkflowJob&WFObjectID=3478:WPDS'

DECLARE @end varchar(10) = REVERSE(SUBSTRING(REVERSE(@string),0,CHARINDEX('=', REVERSE(@string))))

SELECT SUBSTRING(@end,0,CHARINDEX(':', @end))

答案 2 :(得分:0)

如果您只想要这个号码,可以这样做:

select regexp_substr(regexp_substr(s, '=[0-9]*:WPDS', 1, 1), '[0-9]*', 1, 1)

您可以使用regexp_substr()执行此操作。我现在正在测试它。以下内容非常接近:

select regexp_substr(s, '=[0-9]*:WPDS', 1, 1)