如何拆分 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 预期输出,但如果您有更多示例输入,它们可以帮助验证。
为了为 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 预期输出,但如果您有更多示例输入,它们可以帮助验证。