【发布时间】:2022-11-29 05:49:58
【问题描述】:
我正在尝试执行以下操作,我只想替换字符串值中的第一个“T_”。 但是使用 REPLACE,它将替换所有出现的“T_”
REPLACE('T_DEV_ABCT_FACT_SALEST_TEST', 'T_')
有没有其他方法可以只替换第一次出现的?
谢谢你,
【问题讨论】:
标签: snowflake-cloud-data-platform
我正在尝试执行以下操作,我只想替换字符串值中的第一个“T_”。 但是使用 REPLACE,它将替换所有出现的“T_”
REPLACE('T_DEV_ABCT_FACT_SALEST_TEST', 'T_')
有没有其他方法可以只替换第一次出现的?
谢谢你,
【问题讨论】:
标签: snowflake-cloud-data-platform
使用正则表达式替换:
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
【讨论】:
如果你必须替换“第一次出现”,那么 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 |
【讨论】: