mysql - SQL 查询(排序街道地址)

标签 mysql sql

我有一个街道地址列表,我想按以下顺序排序:

  • 街道 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但这恰恰相反。

最佳答案

假设您已将地址表组织成两列 roadhouse_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/

相关文章:

mysql - 如何丢弃内连接表中的值?

sql - 您认为地址表中列的最佳平衡是什么?

sql - 如果连续缺席 10 天,如何获取 FromDate 和 ToDate?

mysql - SQL 对表之间共享值的行求和

mysql - 使用group by和join时无法获取每天的最后订单金额

php - 根据不同的日期间隔计算价格

mysql - 如何删除mysql中的外键?

mysql - 一对多加入聚合函数(最大)

php - Cakephp 3 查找所有且仅每个的最大日期

mysql - sql 查询来检查许多兴趣是否匹配