【问题标题】:REPLACE in Snowflake在雪花中替换
【发布时间】:2022-11-29 05:49:58
【问题描述】:

我正在尝试执行以下操作,我只想替换字符串值中的第一个“T_”。 但是使用 REPLACE,它将替换所有出现的“T_”

REPLACE('T_DEV_ABCT_FACT_SALEST_TEST', 'T_') 

有没有其他方法可以只替换第一次出现的?

谢谢你,

【问题讨论】:

    标签: snowflake-cloud-data-platform


    【解决方案1】:

    使用正则表达式替换:

    WITH t AS (
        SELECT 'T_DEV_ABCT_FACT_SALEST_TEST' AS val
    )
    
    SELECT val, REGEXP_REPLACE(val, '^T_', 'F_') AS val_out
    FROM t;
    
    -- T_DEV_ABCT_FACT_SALEST_TEST, F_DEV_ABCT_FACT_SALEST_TEST
    

    【讨论】:

      【解决方案2】:

      如果你必须替换“第一次出现”,那么 Tim 将只匹配“当事件开始时”,幸运的是REGEXP_REPLACE 有一些选项可以帮助解决这个问题,第一个额外参数说,只替换一个实例(第二个1 在这种情况下)还有一些其他的黑客方法,如INSERT/POSITION(效果不太好)

      SELECT 
          column1 as val
          ,REPLACE(val, 'T_', 'x') as first_try
          ,REGEXP_REPLACE(val, '^T_', 'x') AS only_first_token
          ,REGEXP_REPLACE(val, 'T_', 'x', 1, 1) AS first_t_only
          ,POSITION('T_', val) as pos
          ,INSERT(val, POSITION('T_', val),iff(POSITION('T_', val) > 0, 2,0), 'x') as insert_hack
      FROM VALUES
          ('T_LINE_START_WITH_T'),
          ('LINE_NOT_START_WITH_T'),
          ('LINE_NO_TEE_UNDERSCORE')
          ;
      

      给出:

      VAL FIRST_TRY ONLY_FIRST_TOKEN FIRST_T_ONLY POS INSERT_HACK
      T_LINE_START_WITH_T xLINE_STARxWITH_T xLINE_START_WITH_T xLINE_START_WITH_T 1 xLINE_START_WITH_T
      LINE_NOT_START_WITH_T LINE_NOxSTARxWITH_T LINE_NOT_START_WITH_T LINE_NOxSTART_WITH_T 8 LINE_NOxSTART_WITH_T
      LINE_NO_TEE_UNDERSCORE LINE_NO_TEE_UNDERSCORE LINE_NO_TEE_UNDERSCORE LINE_NO_TEE_UNDERSCORE 0 xLINE_NO_TEE_UNDERSCORE

      【讨论】:

        猜你喜欢
        • 2017-12-08
        • 1970-01-01
        • 2021-04-19
        • 2019-12-25
        • 1970-01-01
        • 2021-09-07
        • 2022-01-09
        • 2021-03-31
        • 1970-01-01
        相关资源
        最近更新 更多