我有一个列,其中的值或行是名称和代码的组合,如下所示。
数据流
Column_X
---------------------------
Saint_Peter_King_Jr_0001
Kishore_Prasad_Misra_1253
George_Floyd_21543
Veer_Venkata_Sai_Narsimha_Kishore_00015
我想在不同的列中获取名称和代码,但是分隔符“\”及其出现位置(count&position)在每一行或值中都不相同,如上所示。
那么如何从右边读取字符串并提取名称和代码,如下所示
要求的结果
Name Code
---------------------------------------------
Saint_Peter_King_Jr 0001
Kishore_Prasad_Misra 1253
George_Floyd 21543
Veer_Venkata_Sai_Narsimha_Kishore 00015
我试过了但是 instr
功能但是 INSTR( string, substring [, start_position [, th_appearance ] ] )
但外观并不是一成不变的,而是根据名字而变化的。如何让它充满活力?
3条答案
按热度按时间pgvzfuti1#
下面sql使用oracle内置函数instr和substr,并假定“code”始终是字符串的最后一部分,并且总是以一个下划线字符开头,即。
_
```select substr('Veer_Venkata_Sai_Narsimha_Kishore_00015',1,instr('Veer_Venkata_Sai_Narsimha_Kishore_00015','',-1) - 1) as NAME
,substr('Veer_Venkata_Sai_Narsimha_Kishore_00015',instr('Veer_Venkata_Sai_Narsimha_Kishore_00015','',-1) + 1) as CODE
from dual
NAME CODE
Veer_Venkata_Sai_Narsimha_Kishore 00015
o4tp2gmn2#
regexp\u substr方法。with语句只是设置数据,肉在select中。正则表达式处理动态的含义,即未知数量的代码字符和/或未知数量的代码数字。正则表达式中的括号定义捕获的组,并返回该组。对于名称,最后一个下划线前的一组字符,后跟一个或多个数字;对于代码,任何字符数和最后一个下划线后的一组或多个数字。
piok6c0g3#
你不能用内置函数来实现。您将不得不编写自己的函数来按程序处理它。