Oracle 12C地址字段提取公寓编号(Flat No)的SQL查询需求
Oracle 12C批量提取地址中的公寓编号(Flat No)
针对你需要从地址字段批量提取Flat No相关内容的需求,这里提供一个高效的正则表达式解决方案,适配你给出的两种地址格式,同时支持处理大量数据行。
核心查询语句
假设你的表名为addresses,存储地址的字段为full_address,可以使用以下SQL查询:
SELECT full_address, -- 提取Flat No部分,忽略大小写,适配多种结尾场景 REGEXP_SUBSTR(full_address, 'Flat no.*?(?=,|\s+[A-Z])', 1, 1, 'i') AS extracted_flat_no FROM addresses;
正则表达式详解
这个正则表达式的逻辑是精准匹配Flat No相关内容,避免过度匹配:
Flat no:匹配固定开头,'i'参数开启忽略大小写,所以能兼容Flat No、flat no等大小写变体.*?:非贪婪模式匹配任意字符,确保不会把后面的街道信息也包含进来(?=,|\s+[A-Z]):正向预查停止条件,当遇到以下两种情况时停止匹配:- 逗号(如第一个示例中Flat No后的逗号)
- 空格+大写字母(如第二个示例中街道名
Scramendo的开头大写S)
测试验证
针对你给出的两个示例地址:
- 输入:
Abc.. Flat no - 8956, 8th road , Scramendo 4th street,Portland.
返回结果:Flat no - 8956 - 输入:
Abcd.. Flat no Ad- 3434/89/69 Scramendo 4th street,Portland.
返回结果:Flat no Ad- 3434/89/69
扩展说明
- 如果地址中存在多个Flat No条目,只需调整
REGEXP_SUBSTR的第4个参数(匹配次数),或者结合CONNECT BY语法来提取所有匹配项 - 若有其他特殊格式的地址(比如Flat No后用其他分隔符),可以在预查条件
(?=...)中添加对应的规则,灵活适配不同场景
内容的提问来源于stack exchange,提问作者ajeet singh
相关产品推荐
相关产品推荐

