雪花:使用单个Regex_replace替换多个模式

时间:2020-07-09 17:39:10

标签: snowflake-cloud-data-platform

要求:希望将以下所有内容实现为一个regex_replace

  1. 将逗号,制表符和换行符替换为空
  2. 将双引号替换为单引号
  3. 将管道替换为破折号

还想知道replace的性能是否比regex_replace

下面是我尝试过的

    with c as (select ' abc \n def\n' as t
              union 
              select 'abc\tdef' as t)          
    select t,regexp_replace(t, '[,\t\n]','') from c;
   
    with c as (select ' abc  de"f\n' as t
              union
              select 'abc\td|ef' as t)
    select t,replace(replace(replace(t, '\n',' '),'"','\''),'|','-') from c;

1 个答案:

答案 0 :(得分:1)

regexp_replace函数将仅匹配一个模式并将其替换为文字值,因此您不能使其根据所匹配的内容有选择地进行替换。您可以编写一个UDF一步来做到这一点,这将使您的SQL更加整洁,特别是如果您必须将其放入很多语句中时。这是所有三个替代品:

#1  DateTime    Y   Var1    Var2    Var3       ID     ID2
    #2  3/1/20  0.67    0.00    0.00    0.00    0      0
    #3  4/1/20  0.31    0.00    0.11    0.00    Var2   1
    #4  5/1/20  0.96    0.00    0.00    0.00    0      0
    #5  6/1/20  0.28    0.00    0.00    0.40    Var3   2
    #6  6/1/20  0.28    0.00    0.00    0.00    0      0
    #7  8/1/20  0.48    0.00    0.00    0.00    0      0
    #8  9/1/20  0.07    0.94    0.00    0.00    Var1   3
    #9  11/1/20 0.94    0.00    0.00    0.00    0      0
    #10 13/1/20 0.05    0.00    0.00    0.00    0      0
    #11 14/1/20 0.04    0.00    0.00    0.53    Var3   2
    #12 15/1/20 0.93    0.00    0.00    0.00    0      0
    #13 17/1/20 0.30    0.00    0.00    0.32    Var3   2
    #14 18/1/20 0.75    0.00    0.00    0.00    0      0 
    #15 22/1/20 0.99    0.00    0.00    0.00    0      0
    #16 23/1/20 0.32    0.15    0.00    0.00    Var1   3
    #17 25/1/20 0.51    0.00    0.00    0.00    0      0
    #18 26/1/20 0.15    0.00    0.00    0.00    0      0
    #19 27/1/20 0.78    0.00    0.00    0.15    Var3   2
    #20 29/1/20 0.83    0.00    0.00    0.00    0      0
    #21 30/1/20 0.10    0.00    0.00    0.00    0      0