社区,我需要帮助删除以下分数'_‘,使名字可读的名字字母UpperCase姓氏UpperCase,同时删除数字以及。希望这是有意义的。我正在运行Presto并使用查询结构。我有更好的方法来写这个语法吗?
电子邮件地址
Full_Metal_Jacket@movie.com
TOP_GUN2@movie.email.com
所需结果
全金属夹克
顶炮
Partical工作决议:
,REPLACE(SPLIT_PART(T.EMAIL, '@', 1),'_',' ') Name就像这样:
,LOWER(REPLACE(UPPER(SPLIT_PART(T.EMAIL, '@', 1)),'_',' '))Name发布于 2021-04-24 03:04:01
试试这个:
WITH t(email) AS (
VALUES 'Full_Metal_Jacket@movie.com', 'TOP_GUN2@movie.email.com'
)
SELECT array_join(
transform(
split(regexp_extract(email, '(^[^0-9@]+)', 1), '_'),
part -> upper(substr(part, 1, 1)) || lower(substr(part, 2))),
' ')
FROM t;它的工作原理:
split使用regex提取非数字前缀到@,前缀on _产生数组,方法是大写每个元素的第一个字母,并使用array_join函数将它们与空格连接在一起。更新
下面是另一个不涉及transform和中间数组的变体:
regexp_replace(
replace(regexp_extract(email, '(^[^0-9@]+)', 1), '_', ' '),
'(\w)(\w*)',
x -> upper(x[1]) || lower(x[2]))与上面的方法一样,它首先提取非数字前缀,然后用replace函数替换下划线,最后使用regexp_replace处理每个单词。(\w)(\w*)正则表达式将单词的第一个字母和单词的其余部分捕获成两个单独的捕获组。然后,x -> upper(x[1]) || lower(x[2]) lambda表达式将第一个字母大写(第一个捕获组- x[1]),小写为其余字母(第二个捕获组- x[2])。
https://stackoverflow.com/questions/67236533
复制相似问题