mysql SQL按街道名称排序,然后按街道编号排序,相同列

bjg7j2ky  于 2023-02-28  发布在  Mysql
关注(0)|答案(2)|浏览(148)

我正尝试按街道名称和街道号码对地址列表进行排序。这两种形式的数据都位于同一列中,即我的架构"data"中的"address"。
数据的格式类似于:

  • 27号朗郡
  • 杜威巷109号
  • 齐克大道26号
  • 1号朗郡
  • 信天翁路26号

我试过了

SELECT * FROM data ORDER BY address;

这就给了我:

  • 1号朗郡
  • 信天翁路26号
  • 齐克大道26号
  • 27号朗郡
  • 杜威巷109号

我也试过:

SELECT * FROM parcel_data.parcels ORDER BY CONVERT(SUBSTRING_INDEX(address, ' ', 1), UNSIGNED INTEGER);

这给了我一个不考虑字母顺序的列表,而是按照数字排列的,看起来类似于:

  • 1号朗郡
  • 泽克林26号
  • 信天翁路26号
  • 27号朗郡
  • 杜威巷109号

理想情况下,我要寻找的输出是:

  • 信天翁路26号
  • 杜威巷109号
  • 1号朗郡
  • 27号朗郡
  • 齐克大道26号

先把街道名称按字母顺序排列,然后再按数字顺序排列。
我该怎么做呢?
蒂亚!

s3fp2yjn

s3fp2yjn1#

在MySQL中,您只需执行以下操作:

order by
  substring_index(address,' ',char_length(replace(address,' ',''))-char_length(address)),
  0+address,
  address

(the最后一个仅用于非数字门牌号)

brjng4g3

brjng4g32#

你可以尝试使用mysql中的定位和反向函数。我只是提取了中间名和排序。
https://dbfiddle.uk/157f2xxv
从数据排序依据中选择 *(选择子字符串(地址,定位(““,地址),长度(地址)-(定位(““,反向(地址))+定位(““,地址))))

相关问题