【问题标题】:Stripping a specific part of variable in SQL在 SQL 中剥离变量的特定部分
【发布时间】:2014-10-29 10:19:20
【问题描述】:

我有一个变量用于动态存储 URL

例如。 a="https://myaccessdev.searshc.com/aveksa/main?Oid=1&ReqType=GetPage&ObjectClass=com.aveksa.gui.objects.workflow.GuiWorkflowJob&WFObjectID=3478:WPDS"

我想从整个字符串中去掉 ":WDPS" 之前最后一个数字。

有没有办法在 SQL 中做到这一点

【问题讨论】:

  • 是的,有办法做到这一点。我认为你想要WFObjectID=:WPDS之间的数字是正确的(即3478,但可以是任何长度)?

标签: sql string oracle


【解决方案1】:

我想从整个字符串中去掉 ":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 进行现场演示。

【讨论】:

    【解决方案2】:

    如果你只想要数字,你可以这样做:

    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)
    

    【讨论】:

      【解决方案3】:

      试试这个

      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))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-06
        • 2015-01-20
        • 2011-08-28
        • 2015-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多