SQL提取地址列Victoria后数字:请求修正错误代码
问题修正方案
你的核心问题是原代码逻辑未精准定位到Victoria后的目标数字,反而误取了末尾的-220。以下是修正后的实现思路和代码:
核心思路
- 判断触发条件:检查地址字符串中是否存在
Australia -(即Australia后紧跟连字符和数字),用模式匹配确保逻辑触发的准确性。 - 提取目标数字:先定位
Victoria的位置,再截取其后的连续数字(直到遇到非数字字符)。
修正后的SQL代码
SELECT [Address], CASE -- 匹配Australia后存在连字符+数字的场景 WHEN PATINDEX('%Australia - [0-9]%', [Address]) > 0 THEN -- 提取Victoria后的连续数字 SUBSTRING( [Address], CHARINDEX('Victoria ', [Address]) + LEN('Victoria '), PATINDEX('%[^0-9]%', SUBSTRING([Address], CHARINDEX('Victoria ', [Address]) + LEN('Victoria '), LEN([Address]))) - 1 ) ELSE '' -- 不符合条件时返回空,可根据需求调整返回值 END AS MyNewColumn FROM 你的表名;
代码说明
PATINDEX('%Australia - [0-9]%', [Address]) > 0:精准匹配Australia后紧跟-和数字的格式,确保仅在符合需求的场景下执行提取逻辑。CHARINDEX('Victoria ', [Address]) + LEN('Victoria '):计算出Victoria之后的起始位置,跳过Victoria本身。SUBSTRING(..., PATINDEX('%[^0-9]%', ...) -1):从起始位置开始截取,直到遇到第一个非数字字符,得到纯数字的目标值(比如示例中的3074)。
测试验证
用你提供的示例地址"Synnot Road, Balwyn Victoria 3074, Australia - 220"测试,该代码会正确返回3074,而非原代码的-220。
内容的提问来源于stack exchange,提问作者Snowy
相关产品推荐
相关产品推荐

