首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UpperCase替换(Split_Part())

UpperCase替换(Split_Part())
EN

Stack Overflow用户
提问于 2021-04-23 20:37:51
回答 1查看 255关注 0票数 0

社区,我需要帮助删除以下分数'_‘,使名字可读的名字字母UpperCase姓氏UpperCase,同时删除数字以及。希望这是有意义的。我正在运行Presto并使用查询结构。我有更好的方法来写这个语法吗?

电子邮件地址

Full_Metal_Jacket@movie.com

TOP_GUN2@movie.email.com

所需结果

全金属夹克

顶炮

Partical工作决议:

代码语言:javascript
复制
,REPLACE(SPLIT_PART(T.EMAIL, '@', 1),'_',' ') Name

就像这样:

代码语言:javascript
复制
 ,LOWER(REPLACE(UPPER(SPLIT_PART(T.EMAIL, '@', 1)),'_',' '))Name
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-24 03:04:01

试试这个:

代码语言:javascript
复制
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;

它的工作原理:

regexp_extract

  • split使用regex提取非数字前缀到@,前缀on _产生数组,方法是大写每个元素的第一个字母,并使用array_join函数将它们与空格连接在一起。

更新

下面是另一个不涉及transform和中间数组的变体:

代码语言:javascript
复制
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])。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67236533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档