2016-03-29 4 views
0

私はデータテーブルにcvssスコアを解析しようとしています。私は、しかし、AV:N/AC:H/PR:L/UI:R/2つの列テーブルにコードをパースします

私は、各メトリック属性のペアで一つの列を作成する機能を持っている

Metric Attribute 
1 AV  N 
2 AC  H 
3 PR  L ...etc 

次のようになり、テーブルを作成する必要があります。このようになりますコードで始まりますそれらを別々の列に分ける方法がわかりません。誰にもここにアイデアはありますか?

ALTER FUNCTION [dbo].[Split] 
(
    @String NVARCHAR(4000), 
    @Delimiter NCHAR(1) 
) 
RETURNS TABLE 
AS 
RETURN 
(
     WITH Split(stpos,endpos) 
    AS(
     SELECT 0 AS stpos, CHARINDEX(@Delimiter,@String) AS endpos 
     UNION ALL 
     SELECT endpos+1, CHARINDEX(@Delimiter,@String,endpos+1) 
      FROM Split 
      WHERE endpos > 0 
    ) 


    SELECT 'Metric:Attribute' = SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos) 
    FROM Split 
) 

答えて

0

私はこの解決策を試すことができました。

ALTER FUNCTION [dbo].[ParseCvss] 
(
    @String NVARCHAR(4000) 
) 
RETURNS TABLE 
AS 
RETURN 
(
    WITH Split(stpos,endpos) 
    AS(
     SELECT 0 AS stpos, CHARINDEX('/',@String) AS endpos 
     UNION ALL 
     SELECT endpos+1, CHARINDEX('/',@String,endpos+1) 
      FROM Split 
      WHERE endpos > 0   
    ) 


    SELECT 'Metric' = left(SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos), CHARINDEX(':', SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos)) - 1), 
      'Value' = SUBSTRING(SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos), CHARINDEX(':', SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0), LEN(@String)+1)-stpos)) + 1, Len(SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0), LEN(@String)+1)-stpos))) 
    FROM Split  
) 
関連する問題