2017-11-17 3 views
0

スペース()とハイフン(-)を含むデータがあり、アンダースコア文字(_)に変換したいと思っています。複数の文字を探して、いくつかの他の文字にそれらのすべてを変換しますAzure/U-SQL - 正規表現代入

var1 <- gsub(var1, "s+|\\-", "_") 

:他の言語(すなわちR)で、私はこのような何かを書くことができます。

U-SQLでこれを行う方法はありますか?

EDIT:

私はこれを試してみましたし、それがエラーなしで走ったが、データを変更しませんでした:

@t2 = SELECT var1, 
      var2, 
      var3.Replace("s+|\\'|\\-","_") AS var3   
    FROM @t1; 
+1

あなたは 'gsub(var1、" \\ s + | - "、" _ ")'を意味すると思います。 REGEXP_REPLACE関数はありませんか? –

+1

ビルドインされているかどうかわかりませんが、.NETの 'System.Text.RegularExpressions.Regex.Replace(src、pattern、repl)'を使用しているようです。 –

+0

CLRを使用して独自のアセンブリを定義できます。要点[こちら](https://web.archive.org/web/20111230084415/http://msdn.microsoft.com/en-us/magazine/cc163473.aspx)注:ちょうど私がAzure SQLで大丈夫かどうかわかりません。 – PJProudhon

答えて

2

あなたは、ほとんど存在していますがSystem.String.Replaceの代わりに、正規表現のための1つを使用しています。だから、

@t2 = SELECT var1, 
     var2, 
     var3.Replace("s+|\\'|\\-","_") AS var3   
FROM @t1; 

@t2 = SELECT var1, 
     var2, 
     Regex.Replace(var3, "s+|\\'|\\-", "_") AS var3   
FROM @t1; 

にある[編集]を変更します。私は、私は式自体を検証しませんでした正規表現の専門家ではないです。

0
@someData = 
SELECT * FROM 
    (VALUES 
    ("tic tac-toe") 
    ) AS T(col1); 

DECLARE @pattern string = "\\s|-"; 

@result = 
SELECT col1 AS original, 
     Regex.Replace(col1, "\\s", "_") AS regex_replaceSpace, 
     Regex.Replace(col1, "-", "_") AS regex_replaceHypen, 
     Regex.Replace(col1, "\\055", "_") AS regex_replaceHypenDecimal, 
     Regex.Replace(col1, "\\s|-", "_") AS regex_replaceBoth, 
     Regex.Replace(col1, @"\s|-", "_") AS regex_replaceBoth_verbatim, 
     Regex.Replace(col1, @pattern, "_") AS regex_replaceBoth_pattern, 

     col1.Replace(" ", "_") AS string_replaceSpace, 
     col1.Replace("-", "_") AS string_replaceHypen, 
     col1.Replace("-", "_").Replace(" ", "_") AS string_replaceBoth 
FROM @someData; 

OUTPUT @result 
TO "/Replace.csv" 
USING Outputters.Csv(outputHeader: true);