2016-10-08 23 views
1

SQL Server 2016には、STRING_SPLIT(Transact-SQL)という機能があります。SQL Server:文字列と区切り文字を含む行?

私の質問への回答はこの機能でうまくいくはずです。

残念ながら、我々は唯一のSQL Server 2012

SELECT 
    email, 
    [Special ftg], 
    [Special OrgCode], 
    [Special SalaryCode] 
FROM 
    Employee 

どのように私はこれを取得することができますがありますか?この中

email    Special ftg        Special OrgCode Special SalaryCode 
----------------------------------------------------------------------------------------- 
[email protected] 4;200;210;220;250;275;1100;1101;1102 14000000000   1 

enter image description here

enter image description here

区切り文字はセミコロンであり、それはすべての列のためにそれをする必要があります。

+0

充実していますあなたがオンラインでそれを検索する場合:// sqlperformance

;WITH cte AS ( SELECT email, CAST('<p>'+REPLACE([Special ftg],';','</p><p>')+'</p>'as xml) as [Special ftg], [Special OrgCode], [Special SalaryCode] FROM Employee ) SELECT c.email, t.c.value('.','int') [Special ftg], NULL [Special OrgCode], NULL [Special SalaryCode] FROM cte c OUTER APPLY [Special ftg].nodes('/p') as t(c) UNION ALL SELECT c.email, NULL, c.[Special OrgCode], NULL FROM cte c UNION ALL SELECT c.email, NULL, NULL, c.[Special SalaryCode] FROM cte c ORDER BY email,[Special SalaryCode],[Special OrgCode],[Special ftg] 

出力を.com/2012/07/t-sql-queries/split-strings)がその1つです。 –

+0

私はオンラインで検索しましたが、簡単な解決策は見つかりませんでした。 私は質問をしました。あなたのリンクはわかりにくいです。 – Nils

答えて

2

あなたはその後、OUTERが適用使用するXMLアリに[Special ftg]を変換することができます:[この](HTTPS、スタッフの

email   Special ftg Special OrgCode Special SalaryCode 
[email protected] 4   NULL   NULL 
[email protected] 200   NULL   NULL 
[email protected] 210   NULL   NULL 
[email protected] 220   NULL   NULL 
[email protected] 250   NULL   NULL 
[email protected] 275   NULL   NULL 
[email protected] 1100  NULL   NULL 
[email protected] 1101  NULL   NULL 
[email protected] 1102  NULL   NULL 
[email protected] NULL  14000000000  NULL 
[email protected] NULL  NULL   1 
+0

こんにちは、ありがとうございます。 スクリプトを少し変更しようとしましたが、エラーが発生します。 SELECT A. [電子メール]、 Split.A.value( ';'、 'NVARCHAR(300)')特別FTG] \t FROMは(CASTメールを選択すると( '' + [(REPLACE特別FTG]、 ';'、 ' ')+ XML AS'')従業員から文字列 \t \t AS) CROSS APPLY string.nodes( '/ M')ASによって分割(A) ORDER AS 1,2 エラーは次のとおりです。 XQuery [A.string.value()]: ';'の近くに構文エラーがあります。 – Nils

+0

'split.A.value( '。'、...'存在していない必要があります; – gofr1

+0

パーフェクトありがとうございます。 – Nils

関連する問題