在第二个到最后一个字符后选择字符串

时间:2018-11-08 21:37:05

标签: sql string oracle

尝试学习一些高级Oracle Sql公式, 我有一个客户领域,
父客户:Child1客户:孙子客户:GreatGrandchild客户

我需要一个可以给我的公式

孙子客户:曾孙子客户

该字段可能在3个或4个关系之间变化,所以我只希望倒数第二个之后的数据:

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您可以通过SUBSTRINSTR进行操作,如下所示:

WITH your_table AS (SELECT 'Parent Customer : Child1 Customer : Grandchild Customer : GreatGrandchild Customer' your_field FROM dual)
SELECT your_field,
       SUBSTR(your_field, INSTR(your_field, ' : ', -1, 2) + 3) your_field_part
FROM   your_table;

YOUR_FIELD                                                                       YOUR_FIELD_PART
-------------------------------------------------------------------------------- ----------------------------------------------
Parent Customer : Child1 Customer : Grandchild Customer : GreatGrandchild Custom Grandchild Customer : GreatGrandchild Customer

这是通过首先找到:字符串开头的位置(从第三个字符(由第三个参数(-1确定))开始的位置开始的,该字符由于为负数,因此表明我们从从字符串末尾而不是开头的第一个字符开始),然后从该字符+ 3(因为:的长度为3个字符)开始到字符串末尾。

答案 1 :(得分:0)

使用substr()instr()的组合。 Instr在子字符串(例如:)的开头为您提供数字,然后这些数字可在substr中用作参数,以仅返回所需的部分源字符串。 Instr还允许您指定该子字符串的哪个出现(作为第三个参数)。

select
      instr(customer,':',1,1) first
    , instr(customer,':',1,2) second
    , instr(customer,':',1,3) third
    , substr(customer,instr(customer,':',1,2)+2) second_and_last_part
    , substr(customer,instr(customer,':',1,2)+2, instr(customer,':',1,3)-instr(customer,':',1,2)-2) second_last_part
    , substr(customer,instr(customer,':',1,3)+2) last_part
from  (
   select 'Parent Customer : Child1 Customer : Grandchild Customer : GreatGrandchild Customer' as customer from dual
   )

nb:您在上方看到的+2的使用是由于每个:的字符位置后面还带有一个空格,因此我们忽略两者都加2。 >

只需混合并匹配具有不同参数的各种函数调用,即可将原始字符串切成多个部分,如上面的查询所示:

+-------+--------+-------+------------------------------------------------+--------------------------+----------------------+
| FIRST | SECOND | THIRD |              SECOND_AND_LAST_PART              |        LAST_PART         |   SECOND_LAST_PART   |
+-------+--------+-------+------------------------------------------------+--------------------------+----------------------+
|    17 |     35 |    57 | Grandchild Customer : GreatGrandchild Customer | GreatGrandchild Customer | Grandchild Customer  |
+-------+--------+-------+------------------------------------------------+--------------------------+----------------------+

INSTR(字符串,子字符串[,开始位置[,外观]])ref

SUBSTR(字符串,开始位置[,长度])ref