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

如何按街道名称、门牌号排序同一列中的地址数据?

解决方案

要实现先按街道名称字母排序、再按门牌号数字排序的需求,你需要把address列拆分为街道名称和门牌号两个部分,分别用于排序:

SELECT * 
FROM data.address
ORDER BY 
  -- 提取街道名称:去掉开头的数字和空格部分
  TRIM(SUBSTRING(address, LOCATE(' ', address) + 1)),
  -- 提取门牌号并转为整数排序
  CONVERT(SUBSTRING_INDEX(address, ' ', 1), UNSIGNED INTEGER);

语句说明

  • TRIM(SUBSTRING(address, LOCATE(' ', address) + 1)):通过LOCATE找到第一个空格的位置,截取空格之后的部分并去除多余空格,得到完整的街道名称(比如从27 Longshire Cir中提取Longshire Cir),按这个字段的字母顺序排序。
  • CONVERT(SUBSTRING_INDEX(address, ' ', 1), UNSIGNED INTEGER):用SUBSTRING_INDEX提取第一个空格前的内容,转为无符号整数,实现门牌号的数字排序(而非字符串排序)。

如果地址存在开头多空格、门牌号带后缀(如27A)等特殊情况,可针对性调整提取逻辑,但针对你给出的示例格式,以上语句完全适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:48:30