【问题标题】:How to split pascal case address in SnowFlake?如何在 SnowFlake 中拆分帕斯卡大小写地址?
【发布时间】:2021-09-30 23:09:09
【问题描述】:

为了为地址创建 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);
 '
 ;

【问题讨论】:

  • 您可以添加更多示例输入和所需输出吗?

标签: snowflake-cloud-data-platform data-processing pascalcasing


【解决方案1】:

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

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

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

【讨论】:

  • 嗨,埃里克,谢谢!它有很大帮助!我想澄清一下“12345NE17St”的预期输出是“12345 NE 17St”,而不是我的函数的输出“12345 NE17 St”。很抱歉造成误导。
  • 啊,我在你的问题描述中看到了,抱歉我错过了。你能定义确切的规则吗?我不是来自美国,我确定街道地址的格式。 NE代表东北? 17st 是什么意思? “123 45th St”对我来说很有意义,但我对“12345 NE 17St”有点困惑。如果你能分享规则,我会看看我如何改进正则表达式。
  • 嗨,埃里克,我的错。这是我得到的真实例子之一,哈哈。我也很困惑。我认为“12345 NE 17St”应该是“12345 NE 17Th St”。它与另一个示例“123 45Th St”类似,只是在 12345 和 17Th 之间有一个“NE”。是的,NE 代表东北,就像 SW 代表西南。?
  • 我已经更新了答案,需要更多示例来测试,可能需要一些更新。
猜你喜欢
  • 2013-11-27
  • 1970-01-01
  • 2015-10-10
  • 2020-12-22
  • 1970-01-01
  • 2015-04-10
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多