2016-03-08 63 views
1

我有幾百條記錄與從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' 

我可以得到賬戶很容易不夠,因爲該字符串是固定的樂NGTH達到平衡,但後來我需要拆分由SUBSTRING(MQ_Message,92,30)返回的字符串,並取得平衡部分出它是17017362,將是,也許之間的不同(便士!)

爲了達到平衡,我嘗試了使用CHARINDEX的所有可能的組合。

這樣做的最好方法是什麼?

+0

的可能的複製[?我該如何分割字符串,所以我可以訪問項x](http://stackoverflow.com/questions/2647/how-do- i-split-a-string-so-i-can-access-item-x) –

+0

那麼,你是否嘗試過我的解決方案? – gofr1

回答

1
DECLARE @string NVARCHAR(MAX) = '006 1 AccountSetBalance 0000000000 EQ 2016-03-01-18.45.42.002000 0038882665 _ 123456 12345612345678 17017362 0 0', 
     @xml xml 

select @xml = cast('<d><q>'+REPLACE(@string,' ','</q><q>')+'</q></d>' as xml) 

SELECT n.v.value('q[9]','integer'), 
     n.v.value('q[11]','integer') 
FROM @xml.nodes('/d') AS n(v); 

結果:

----------- ----------- 
123456  17017362 

(1 row(s) affected) 
+0

抱歉,將此標記爲答案 –

+0

謝謝!樂意效勞! – gofr1