雪花:REGEXP 替换为捕获组的大写
Snowflake : REGEXP replace with uppercase of capture group
我想在 snowflake 数据库中将逗号 (,) 之后的第一个字母替换为大写字母。下面给出的是我尝试过的,但没有用。
例如:
Apple,ball,cat --> Apple,Ball,Cat
Bulb,LED,tube --> Bulb,LED,Tube
SELECT REGEXP_REPLACE('Apple,ball,cat',',(\\w)',UPPER('\'));
,(\\w)
捕获逗号后的字母,但 UPPER('\')
不会将其转换为大写。
我不确定你是否可以在 REGEXP_REPLACE 中使用函数。
请使用内置的 INITCAP 函数
SELECT INITCAP('Apple,ball,cat', ',');
参考:INITCAP
或者像这样:
SELECT LISTAGG(UPPER(LEFT(VALUE, 1)) || SUBSTRING(VALUE, 2, LEN(VALUE)), ',')
FROM TABLE(SPLIT_TO_TABLE('Apple,ball,cat', ',')) as t(val);
正则表达式不会帮助你提升你的字符,所以你可以结合使用 split_to_table 和 initcap:
SELECT LISTAGG( INITCAP(VALUE) ,',' )
FROM TABLE(SPLIT_TO_TABLE('Apple,ball,cat',','));
不是“正则表达式”,但如果您对 Javascript UDF 感兴趣,它可以满足您的需求...
CREATE OR REPLACE FUNCTION fx_replaceInitOnly(
input varchar)
returns varchar
language javascript
as '
//logic from https://www.freecodecamp.org/news/how-to-capitalize-words-in-javascript/
var words = INPUT.split(",");
for (let i = 0; i < words.length; i++) {
words[i] = words[i][0].toUpperCase() + words[i].substr(1);
}
output = words.join(",");
return output;
';
SELECT
'Apple,ball,cat,Bulb,LED,Tube' as str,
fx_replaceInitOnly(str) as new,
case WHEN str <> new THEN 'Changed' ELSE 'Same' END as test;
--STR NEW TEST
--Apple,ball,cat,Bulb,LED,Tube Apple,Ball,Cat,Bulb,LED,Tube Changed
我想在 snowflake 数据库中将逗号 (,) 之后的第一个字母替换为大写字母。下面给出的是我尝试过的,但没有用。
例如:
Apple,ball,cat --> Apple,Ball,Cat
Bulb,LED,tube --> Bulb,LED,Tube
SELECT REGEXP_REPLACE('Apple,ball,cat',',(\\w)',UPPER('\'));
,(\\w)
捕获逗号后的字母,但 UPPER('\')
不会将其转换为大写。
我不确定你是否可以在 REGEXP_REPLACE 中使用函数。
请使用内置的 INITCAP 函数
SELECT INITCAP('Apple,ball,cat', ',');
参考:INITCAP
或者像这样:
SELECT LISTAGG(UPPER(LEFT(VALUE, 1)) || SUBSTRING(VALUE, 2, LEN(VALUE)), ',')
FROM TABLE(SPLIT_TO_TABLE('Apple,ball,cat', ',')) as t(val);
正则表达式不会帮助你提升你的字符,所以你可以结合使用 split_to_table 和 initcap:
SELECT LISTAGG( INITCAP(VALUE) ,',' )
FROM TABLE(SPLIT_TO_TABLE('Apple,ball,cat',','));
不是“正则表达式”,但如果您对 Javascript UDF 感兴趣,它可以满足您的需求...
CREATE OR REPLACE FUNCTION fx_replaceInitOnly(
input varchar)
returns varchar
language javascript
as '
//logic from https://www.freecodecamp.org/news/how-to-capitalize-words-in-javascript/
var words = INPUT.split(",");
for (let i = 0; i < words.length; i++) {
words[i] = words[i][0].toUpperCase() + words[i].substr(1);
}
output = words.join(",");
return output;
';
SELECT
'Apple,ball,cat,Bulb,LED,Tube' as str,
fx_replaceInitOnly(str) as new,
case WHEN str <> new THEN 'Changed' ELSE 'Same' END as test;
--STR NEW TEST
--Apple,ball,cat,Bulb,LED,Tube Apple,Ball,Cat,Bulb,LED,Tube Changed