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)
。
答案 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而不仅仅是普通的子字符串。