我想使用substring并根据我的模式获取值

时间:2010-12-08 09:13:45

标签: 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

但原始字符串是:

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

我无法获得子串返回我想要的东西。我想要500和1000之类的值。该字段的数据类型是VARCHAR2(1000 Byte)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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
       )

返回:

VALUE1    VALUE2
--------- ---------
     1000       500

1 row selected.

如果你的字符串不规则,你需要在每个PKR上拆分字符串,然后在PKR之后拔出9个字符,你将不得不使用更好的SQL而不仅仅是普通的子字符串。