數據收集器向sql server 2008發送時間序列數據。爲了使數據表更簡潔,時間序列以envelop []形式發送。 這是存儲在SQL Server中的數據如何處理SQL服務器中的envelope []數據
我的工作是總結每一行中讀物列,例如在上述得到的總和(0,18,22,28,...)表。如果在sql server中有任何函數展開數據,例如{envelope:[{0,0],...}
數據收集器向sql server 2008發送時間序列數據。爲了使數據表更簡潔,時間序列以envelop []形式發送。 這是存儲在SQL Server中的數據如何處理SQL服務器中的envelope []數據
我的工作是總結每一行中讀物列,例如在上述得到的總和(0,18,22,28,...)表。如果在sql server中有任何函數展開數據,例如{envelope:[{0,0],...}
隨着解析器的幫助UDF
Declare @YourTable table (Readings varchar(50))
Insert Into @YourTable values
('{envelope:[{0:0},{1:18},{2:22},{3:28},]}'),
('{envelope:[{0:0},{1:12},{2:17},{3:24},]}')
Select A.*
,B.Total
From @YourTable A
Cross Apply (Select Total = sum(cast(Substring(Key_Value,1,charindex('}',Key_Value)-1) as int)) from [dbo].[udf-Str-Parse](Readings,':') where ISNUMERIC(left(Key_Value,1))=1) B
返回
Readings Total
{envelope:[{0:0},{1:18},{2:22},{3:28},]} 68
{envelope:[{0:0},{1:12},{2:17},{3:24},]} 53
如果需要
CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimeter varchar(10))
--Usage: Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')
-- Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')
Returns @ReturnTable Table (Key_PS int IDENTITY(1,1), Key_Value varchar(max))
As
Begin
Declare @XML xml;Set @XML = Cast('<x>' + Replace(@String,@Delimeter,'</x><x>')+'</x>' as XML)
Insert Into @ReturnTable Select ltrim(rtrim(String.value('.', 'varchar(max)'))) FROM @XML.nodes('x') as T(String)
Return
End
謝謝您的通知UDF。還有一些問題需要問:1我的表中讀數的數據類型是什麼? xml?2能否提供一些關於處理我的問題或數據的文章或博客{envelope:[{0:0},{1:18},{2:22},{3:28},}}。再次感謝 – wikichung
@wikichung 1)我將樣本數據定義爲varchar(50)可以是任何東西2)XML在UDF中。這是解析字符串的最有效方式。這是非常強大和靈活的...相信我你會挖它。 –
請貼預期的結果和目前的結果作爲文本 – TheGameiswar