2015-10-23 151 views
1

我需要幫助處理一列到輸出,如下面在sql中所示。我有一個名爲Description的列,它具有以下文本。SQL查詢數據拆分

User InformationName:jweller 
Company:CamTel 
Business Phone: 1234567890 
Business Email: [email protected] 
Device Model: SGH-I547C 
OS version: 4.1.2 
Application Version: 1.0.59.2 
Product Name: Demo Mobile 
Android App Device language: English (Canada) Device 
Time Zone: Mountain Standard Time 
Data connection:Cellular network (3G) 
Signal Strength: -81dBM 
Error Message Displayed to the U 

我想這個文本被轉換成行,列和類似的東西。我正在使用sql server 2008.

任何建議都會非常有幫助。

User InformationName | Company | Business Phone |Email      | Device Model | OS version | Application Version | Product Name 
jweller    CamTel 1234567890  [email protected] SGH-I547C   4.1.2  1.0.59.2    Demo Mobile Android App 
+0

實例那麼你是怎麼試試兄弟 – meda

+0

我很懷疑這是可能的。您將不得不具體瞭解您在數據中期望的每個列名稱 –

+0

我只想要問題中指定的列。這些將只是我需要的列.. – Karthi

回答

1

得到這個結果,你可以嘗試這樣的:

SELECT SUBSTRING(description, (CHARINDEX('User InformationName:', description) + LEN('User InformationName:')), CHARINDEX('Company:', description) - (CHARINDEX('User InformationName:', description) + LEN('User InformationName:'))) AS [User InformationName], 
     SUBSTRING(description, (CHARINDEX('Company:', description) + LEN('Company:')), CHARINDEX('Business Phone:', description) - (CHARINDEX('Company:', description) + LEN('Company:'))) AS [Company], 
     SUBSTRING(description, (CHARINDEX('Business Phone:', description) + LEN('Business Phone:')), CHARINDEX('Business Email:', description) - (CHARINDEX('Business Phone:', description) + LEN('Business Phone:'))) AS [Business Phone], 
     SUBSTRING(description, (CHARINDEX('Business Email:', description) + LEN('Business Email:')), CHARINDEX('Device Model:', description) - (CHARINDEX('Business Email:', description) + LEN('Business Email:'))) AS [Business Email], 
     SUBSTRING(description, (CHARINDEX('Device Model:', description) + LEN('Device Model:')), CHARINDEX('OS version:', description) - (CHARINDEX('Device Model:', description) + LEN('Device Model:'))) AS [Device Model], 
     SUBSTRING(description, (CHARINDEX('OS version:', description) + LEN('OS version:')), CHARINDEX('Application Version:', description) - (CHARINDEX('OS version:', description) + LEN('OS version:'))) AS [OS version], 
     SUBSTRING(description, (CHARINDEX('Application Version:', description) + LEN('Application Version:')), CHARINDEX('Product Name:', description) - (CHARINDEX('Application Version:', description) + LEN('Application Version:'))) AS [Application Version], 
     SUBSTRING(description, (CHARINDEX('Product Name:', description) + LEN('Product Name:')), CHARINDEX('Device language:', description) - (CHARINDEX('Product Name:', description) + LEN('Product Name:'))) AS [Product Name] 
FROM myTable 

這裏是SQL Fiddle使您可以檢查這是你在尋找的。

這裏我使用簡單的SUBSTRING函數這是解釋here並做計算從哪個字符串索引開始和長度字符串我使用CHARINDEX和LEN函數,這並不那麼複雜,你可以找到網絡上的解釋很容易...

GL!

P.S.我想我不需要說你這是不是很好的存儲信息的方式,我認爲這很明顯,爲什麼......

1

你也可以使用字符串拆分器來做到這一點,以便首先拆分數據通過換行到行,然後將值之前和之後:像這樣的東西分開:

select * From (
    select ltrim(left(s.Value, P.P - 1)) as Type, 
     ltrim(substring(s.Value, P.P+1, 9999)) as Value 
    from table1 t 
    cross apply cte_split_core (t.description, char(10)) s 
    cross apply (select charindex(':', s.Value) as P) P 
    where P.P > 0 
) s pivot (
    max(Value) FOR Type IN ([User InformationName],[Company],[Business Phone],[Business Email],[Device Model],[OS version],[Application Version],[Product Name]) 
) Pvt 

的CTE功能是從厄蘭Sommarskog的article但你可以用別人了。在SQL Fiddle