尝试学习一些高级Oracle Sql公式,
我有一个客户领域,
父客户:Child1客户:孙子客户:GreatGrandchild客户
我需要一个可以给我的公式
孙子客户:曾孙子客户
该字段可能在3个或4个关系之间变化,所以我只希望倒数第二个之后的数据:
任何帮助将不胜感激!
答案 0 :(得分:1)
您可以通过SUBSTR
和INSTR
进行操作,如下所示:
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