2017-02-13 8 views
1

これはSQL Serverで実行できるかどうかわかりません。可能であれば誰かがSQLを手伝ってもらえますか?SQL Serverでのクリティカル正規表現の実装

私はデータを持つテーブルを持っているが、このようになります:

enter image description here

よう

DECLARE @MYTABLE TABLE 
(
    ColumnA VARCHAR (50) 
) 

INSERT INTO @MYTABLE 
    SELECT '01268 591558 * 3 Marina' UNION ALL 
    SELECT '01322 421980    JULIE  A/P' UNION ALL 
    SELECT '01296620096 BR TAKES CARD EOM' UNION ALL 
    SELECT '07547 740863/07986 019852' UNION ALL 
    SELECT '07754553528 - TIM' UNION ALL 
    SELECT '07732418595 sam' UNION ALL 
    SELECT '01793 425574- Charlotte' UNION ALL 
    SELECT '01268 591558 * 3 Marina' UNION ALL 
    SELECT '07967 967404 CELIA' UNION ALL 
    SELECT '0208 361 1213/1433      /8899 ' UNION ALL    
    SELECT '0208 361 1213/1433 '  UNION ALL         
    SELECT '0208 361 1213/1433' UNION ALL          
    SELECT '01206 578671/564272' UNION ALL 
    SELECT '01206735561/07748116152' UNION ALL 
    SELECT '0208 361 1213/1433  '  UNION ALL        
    SELECT '   SUE' UNION ALL 
    SELECT '01206735561/07748116152/0156589' 

と私は期待していた出力は、誰かがこれで私を助けてくださいことはできますか?

ありがとうございました

+0

をたどると、SQLのために非常に適していない難しい作業です。これは、正規表現マッチングであっても、難しいでしょう。 –

+0

Gordonの言葉に加えて、SQLは正規表現をサポートしていません。 _limited_パターンマッチングのサポートはありますが、SQLはあなたが達成しようとしているタスクの適切なツールではありません。 – pymaxion

+0

:)私の悪い....... –

答えて

1

サンプルデータで動作しますが、落とす可能性があります。

現在、XMLは最大9個の位置に分割されます(展開しやすい、または契約が簡単です)。

明らかに、必要に応じてColumnXを追加できます。ちょうどあなたの電話番号をクリーンアップパターン

Select A.* 
     ,Column1 = left(Pos1,11) 
     ,Column2 = case when Try_Convert(float,Pos2) is null then null else Left(Pos1,11-Len(Pos2))+Pos2 end 
     ,Column3 = case when Try_Convert(float,Pos3) is null then null else Left(Pos1,11-Len(Pos3))+Pos3 end 
From @MYTABLE A 
Cross Apply (
       Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)'))) 
         ,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)'))) 
         ,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)'))) 
         ,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)'))) 
         ,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)'))) 
         ,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)'))) 
         ,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)'))) 
         ,Pos8 = ltrim(rtrim(xDim.value('/x[8]','varchar(max)'))) 
         ,Pos9 = ltrim(rtrim(xDim.value('/x[9]','varchar(max)'))) 
       From (Select Cast('<x>' + replace((Select replace(replace(A.ColumnA,' ',''),'/','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as C 
      ) B 

戻り

enter image description here

+0

言葉を言いません......ありがとうジョン:) –

+0

@RohiniMathurハッピーは役に立ちました –

+0

こんにちはジョン、提案されたソリューションはすばらしい働いています、私が生産データベースに対してテストしたときに得ているこのエラーを回避することは可能ですか? msgstr "無効な長さパラメータがLEFTまたはSUBSTRING関数に渡されました。"助けてください –