Sql 我想使用子字符串并根据我的模式获取值

Sql 我想使用子字符串并根据我的模式获取值,sql,oracle,crystal-reports,Sql,Oracle,Crystal Reports,第一列中的结果是: select substr(e.orgmessage, 40, 50) as one, orgmessage as original_message from table 但原始字符串是: 00 02182 00363 00008 O PKR 500 01983 00319 我无法获取子字符串以返回我想要的内容。我想要像500和1000这样的值。该字段的数据类型为VARCHAR2(1000字节)使用INSTR查找子字符串在源字符串中的位置

第一列中的结果是:

select substr(e.orgmessage, 40, 50) as one,
       orgmessage as original_message
  from table
但原始字符串是:

00 02182 00363 00008 O    PKR      500 01983 00319

我无法获取子字符串以返回我想要的内容。我想要像500和1000这样的值。该字段的数据类型为
VARCHAR2(1000字节)

使用INSTR查找子字符串在源字符串中的位置,然后使用substr将其从该位置解析出来。

如果您的字符串每次都遵循规则模式,那么您应该能够轻松地提取2个值。样本字符串中的500和1000位于PKR指示器之后。如果字符串是正则的,则值从字符33和69开始,每个值运行9个字符。通过使用,我们可以使用:

09:22:12 CASH COUNTERS(C)    PKR     1000 02182 00363 00008 O    PKR      500 01983 00319 00315 O    ***        0 00000 00000 00000 N    ***        0 00000 00000 00000 N
返回:

select substr(txt, 33, 9) value1,
       substr(txt, 69, 9) value2
  from (select '09:22:12 CASH COUNTERS(C)    PKR     1000 02182 00363 00008 O    PKR      500 01983 00319 00315 O    ***        0 00000 00000 00000 N    ***        0 00000 00000 00000 N' txt
          from dual
       )

如果您的字符串不规则,需要在每个PKR处拆分字符串,然后在PKR后取出9个字符,那么您必须使用比普通substr更奇特的SQL。

您的问题到底是什么?它是否像查看substr文档一样简单,其中的参数是(源字符串、位置、长度)。还是更复杂?此外,可能有助于选择代码并按下编辑器(101010)中的“代码”按钮以使其更具可读性。
VALUE1    VALUE2
--------- ---------
     1000       500

1 row selected.