在oracle数据库中截取一个表名下的几个字段?

大哥大姐,打扰一下,在oracle数据库中截取一个表名下的几个字段??

在oracle数据库中,我想要截取R_DY_TEXT9下patid=后面的数字和syxh=后面的数字,逻辑应该是先截取分号之间的数据,然后再截取整个字段中=后面的数据,可惜我不会写,有点尴尬
最新回答
她ゝ那么高傲

2024-10-14 07:08:16

你的运气挺好,我发现所有数据的格式都是统一的,而且patid是第一个p的出现点,后面的分号都是第七个分号,syxh是第一个s的出现点,后面的分号是第九个,这样就很容易判断了。
举例,截取patid后面的数字
(1)定位 instr(R_DY_TEXT9,'p') 当然写成 instr(R_DY_TEXT9,'patid')也可以 ,二者是一样的
(2)定位第七个分号instr(R_DY_TEXT9,';',1,7)(判断第七个分号的位置,可能我数错了,这个你要自己好好看看)
(3)instr(R_DY_TEXT9,'patid')+6 这个是数组开头的位置,‘patid=’一共是六位,所以要加6
那么substr的截取长度就是instr(R_DY_TEXT9,';',1,7)-instr(R_DY_TEXT9,'patid')-6
合在一起就是(我写的没有试验过,可能需要一些微调(比如分号个数不对,截取开始位置不对,截取长度不对等等),具体的你可以找一条数据来测试一下,然后改变后面的参数就可以了)
substr(R_DY_TEXT9,instr(R_DY_TEXT9,'patid')+6 ,instr(R_DY_TEXT9,';',1,7)-instr(R_DY_TEXT9,'patid')-6)
翻译过来就是在R_DY_TEXT9字段中,从instr(R_DY_TEXT9,'patid')+6 位开始,截取长度为instr(R_DY_TEXT9,';',1,7)-instr(R_DY_TEXT9,'patid')-6的字符串
后面截取syxh也是一样的
substr(R_DY_TEXT9,instr(R_DY_TEXT9,'syxh')+5 ,instr(R_DY_TEXT9,';',1,9)-instr(R_DY_TEXT9,'syxh')-5)
二者截取出来了,就能判断了。
追问
非常感谢,我验证过了