如何在SnowFlake中拆分帕斯卡命名格式的地址字段?
解决方案
问题根因
你当前使用的正则会在所有大写字母前插入空格,同时缺少下划线替换逻辑,是输出不符合预期的核心原因:
- 遇到
45ThSt时,会在T(Th的首字母)和S(St的首字母)前都加空格,导致输出45 Th St - 遇到
NE17ThSt时,会在N、E、T、S前加空格,不符合你要保留NE、17Th作为整体的需求 - 未处理地址中的下划线,导致下划线保留在输出中
修改后的UDF代码
调整逻辑:先替换所有下划线为空格,再仅在三类需要拆分的场景前插入空格:小写字母后接大写字母、数字后接大写字母、大写字母后接数字
CREATE OR REPLACE FUNCTION Split_On_Upper_Case(s string) RETURNS string LANGUAGE JAVASCRIPT AS $$ function Split_On_Upper_Case(str){ // 替换下划线为空格 str = str.replace(/_/g, ' '); // 按规则插入空格 str = str.replace(/(?<=[a-z])(?=[A-Z])|(?<=[0-9])(?=[A-Z])|(?<=[A-Z])(?=[0-9])/g, ' '); return str; } return Split_On_Upper_Case(S); $$;
测试验证
- 输入
'123_45ThSt',输出为'123 45Th St',符合预期 - 输入
'12345NE17ThSt',输出为'12345 NE 17Th St',符合预期
内容的提问来源于stack exchange,提问作者YChange
相关产品推荐
相关产品推荐

