2016-03-08 75 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