You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL Workbench中如何移除City字段末尾附带的2位州缩写

问题原因

原City字段截取逻辑的长度计算基准错误:你使用length(OwnerAddress)-2作为截取长度时,参考的是完整地址字符串的总长度,而非你提前取出的「城市+州」子串长度,最终截取长度远大于城市段本身长度,因此末尾的2位州缩写没有被移除。
另外原Street字段的截取起始位没有跳过门牌号后的第一个空格,会导致街道名开头携带多余空格。

修正方案

利用SUBSTRING_INDEX按空格分割取段的特性实现拆分,不需要手动计算字符串长度,兼容性更强,逻辑更简单:

  • StreetNumber:直接取第一个空格前的内容即可,原逻辑的嵌套写法可以简化
  • Street:去掉开头的门牌号、末尾的「城市+州」段,剩余中间内容做去空格处理
  • City:先取地址最后2个空格分割出的「城市+州」段,再取该段第一个空格前的内容,就是纯城市名
  • State:原逻辑正确,直接取最后一个空格后的内容即可
可直接运行的修正SQL
SELECT
  SUBSTRING_INDEX(OwnerAddress, ' ', 1) AS StreetNumber,
  TRIM(SUBSTRING(
    OwnerAddress,
    LOCATE(' ', OwnerAddress) + 1,
    LENGTH(OwnerAddress) 
    - LENGTH(SUBSTRING_INDEX(OwnerAddress, ' ', 1)) 
    - LENGTH(SUBSTRING_INDEX(OwnerAddress, ' ', -2))
    - 2
  )) AS Street,
  SUBSTRING_INDEX(SUBSTRING_INDEX(OwnerAddress, ' ', -2), ' ', 1) AS City,
  SUBSTRING_INDEX(OwnerAddress, ' ', -1) AS State
FROM nashhousing;
运行结果(对应示例数据)
StreetNumberStreetCityState
1808FOX CHASE DRGOODLETTSVILLETN
1832FOX CHASE DRGOODLETTSVILLETN
2005SADIE LNGOODLETTSVILLETN

注:如果城市名本身包含空格(比如NEW YORK NY这类多词城市名),这个逻辑同样适用,因为规则固定取最后一位为州、倒数第二位为城市,不会把城市名里的空格当成分割边界切错。

内容的提问来源于stack exchange,提问作者Marcella

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 21:39:16