UpperCase Replace(Split_Part())



社区,我需要帮助删除UNDER SCORES"_",并使名称的名字字母UpperCase姓氏UpperCase可读,同时删除数字。希望这是有道理的。我正在运行Presto并使用Query Fabric。我有更好的方法来写这个语法吗?

电子邮件地址
Full_Metal_Jacket@movie.com
TOP_GUN2@movie.email.com

所需结果
全金属护套
壮志凌云

颗粒工作分辨率:

,REPLACE(SPLIT_PART(T.EMAIL, '@', 1),'_',' ') Name

类似这样的东西:

,LOWER(REPLACE(UPPER(SPLIT_PART(T.EMAIL, '@', 1)),'_',' '))Name

试试这个:

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—_上的前缀以生成数组
  • transform通过将每个元素的第一个字母大写并将其余字母小写来表示数组
  • 最后,使用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](。

相关内容

  • 没有找到相关文章

最新更新