如何拆分 SnowFlake 中的 Pascal 大小写地址?

How to split pascal case address in SnowFlake?

为了为 link 我的一些表的地址创建 PlaceKey,我需要在 SnowFlake 中拆分一个地址列。

我不熟悉 JavaScript,但我在 SnowFlake 中尝试了 Javascript UDF。然后我不知道如何处理像'123_45ThSt'这样的地址。

我函数的输出类似于“123_45 Th St”。我卡在这里了。

预期输出为“123 45Th St”。 希望有人能帮助我。非常感谢!

下面是另一个例子和我的 SnowFlake SQL 代码:

 Original address column: 12345NE17ThSt

 The expected column:     12345 NE 17Th St

 My function's output:    12345 NE17 ST

我的函数:

CREATE OR REPLACE FUNCTION Split_On_Upper_Case(s string)
 RETURNS string
 LANGUAGE JAVASCRIPT 
 AS '
 function Split_On_Upper_Case(str){
 str=str.split(/(?=[A-Z])/).join(" ")
 return str
 }

 // Now call the function
 return Split_On_Upper_Case(S);
 '
 ;

假设街道地址的格式,包括数字+单词(以小写或数字结尾)+单词(以大写开头),我有以下解决方案:

CREATE OR REPLACE FUNCTION Split_On_Upper_Case(s string)
RETURNS string
LANGUAGE JAVASCRIPT 
AS $$
  regexp = /([0-9]+)(NE|SE|NW|SW)?(.*[0-9a-z]{1})([A-Z][a-zA-Z0-9]+)/g;
  splits = regexp.exec(S.replace(/_/g, " "));
  if (splits && splits.length == 5) {
     return 
        splits[1].trim() + " " + 
        (splits[2] ? splits[2].trim() + " ": "" ) + 
        splits[3].trim() + " " + 
        splits[4].trim();
  }
  
  return "not found" // or whatever you want to do
$$;

然后尝试运行函数:

select Split_On_Upper_Case('12345NE17ThSt');
-- 12345 NE 17Th St

select Split_On_Upper_Case('123_45ThSt');
-- 123 45Th St

select Split_On_Upper_Case('35TestSt');
-- 35 Test St

它 returns 预期输出,但如果您有更多示例输入,它们可以帮助验证。