私のクエリでは、次のような iSeries メッセージ キューからの文字列を含む数百のレコードがあります。
006 1 AccountSetBalance 0000000000 EQ 2016-03-01-18.45.42.002000 0038882665 _ 123456 12345612345678 17017362 0 0
結果に口座番号部分12345678
と残高部分を表示する必要があります。17017362
私が試してみました:
SELECT MQ_Message
, SUBSTRING(MQ_Message,92,30) -- = 12345678 17017362 0
, SUBSTRING(MQ_Message,92,8) -- = 12345678 , SUBSTRING(MQ_Message,100, CHarIndex(' ', SUBSTRING('006 1 AccountSetBalance 0000000000 EQ 2016-03-01-18.45.42.002000 0038882665 _ 123456 12345612345678 17017362 0 0',92,20)) )
, CHarIndex(' ', SUBSTRING('006 1 AccountSetBalance 0000000000 EQ 2016-03-01-18.45.42.002000 0038882665 _ 123456 12345612345678 17017362 0 0',99,20))
, CHARINDEX(' ','17017362 0 0')
from outboundMessages WHERE message_Type = '006'
文字列は残高まで固定長であるため、アカウントを簡単に取得できますが、返された文字列を分割して、 0とおそらく999999の間で異なるSUBSTRING(MQ_Message,92,30)
残高部分を取得する必要があります(ペンス!)17017362
CHARINDEX を使用して考えられるあらゆる組み合わせを試した結果、バランスを取るのに本当に苦労しました。
これを行う最善の方法は何ですか?