我有一个街道地址列表,我想按以下顺序排序:
- 街道 1
- A 街 27 号
- 27 号街
- D 街 30 号
- D 街 31 号
- 205 号街道
- B 街 207 号
当我执行一个简单的 order by
street 时,我得到:
Street 1, Street 205, Street 207 B, Street 27 A, Street 27 F, Street 30 D, Street 30 D
这不是我想要的。
我找不到任何好的例子,这里有一个 here但这恰恰相反。
最佳答案
假设您已将地址表组织成两列 road
和 house_number
(后者带有补码),以下查询 (PostgreSQL) 可以解决问题(订购地址独特的道路“The Road”):
SELECT road, house_number from address_table
WHERE road = 'The Road'
ORDER BY CAST(regexp_replace(house_number, '[[:alpha:]]', '') AS INTEGER),
regexp_replace(house_number, '[[:digit:]]', '')
似乎也有一些方法可以用 MySQL 代替正则表达式:How to do a regular expression replace in MySQL?
关于mysql - SQL 查询(排序街道地址),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25245121/