Mysql SQL查询(对街道地址进行排序)
我有一个街道地址列表,我想按以下顺序排序:Mysql SQL查询(对街道地址进行排序),mysql,sql,Mysql,Sql,我有一个街道地址列表,我想按以下顺序排序: 第一街 第27 A街 街27楼 30 D街 31 D街 205街 207B街 当我按街道进行简单的订购时,我得到: Street 1, Street 205, Street 207 B, Street 27 A, Street 27 F, Street 30 D, Street 30 D 这不是我想要的 我找不到任何好的例子,这里有一个,但这是相反的 ORDER_BY your_Order * 1 ASC 将其转换为数字,因为它似乎是文本值
- 第一街
- 第27 A街
- 街27楼
- 30 D街
- 31 D街
- 205街
- 207B街
Street 1, Street 205, Street 207 B, Street 27 A, Street 27 F, Street 30 D, Street 30 D
这不是我想要的
我找不到任何好的例子,这里有一个,但这是相反的
ORDER_BY your_Order * 1 ASC
将其转换为数字,因为它似乎是文本值
检查表定义并对其进行更改。您可以像这样将数据类型更改为int
ALTER TABLE your_Table MODIFY COLUMN registration_no int;
如果所有列都以单个单词开头(如
'Street'
),后跟空格和数字,则可以执行以下操作:
order by substring_index(streetaddress, ' ', 2) + 0
这将把地址中的第二个“字”转换成用于排序的数字
如果您的真实数据与示例数据不同,我建议您提出另一个问题,并举例说明数据的真实情况。试试这个
地址为
(
SELECT
Address1,
Postcode,
CASE WHEN ISNUMERIC(SUBSTRING(LTRIM(Address1), 1, 1)) = 1 THEN 'yes' ELSE 'no' END AS StartsWithNumber,
CASE WHEN ISNUMERIC(SUBSTRING(LTRIM(Address1), 1, 1)) = 1 THEN SUBSTRING(Address1, 1, CHARINDEX(' ', Address1)) END AS housenumber
FROM youttable )
从地址中选择地址1
按开始排序,编号为asc、housenumber、Address1假设您已将地址表分为两列
road
和house_number
(后者带有补码)。以下查询(PostgreSQL)起到了作用(为不同的道路“the road”排序地址):
用MySQL替换正则表达式似乎也有很多方法:你使用的是什么数据库?你需要将数字值分为一个数值,然后按文本街道名称再按数字排序。几乎不可能得到一致的结果,因为你可能在街道的
名称中有一个号码。最好的办法是分开。街道名称2。3号房间。HouseNumberComplement@GordonLinoff我使用的是mysqlWell,如果您将数据分成3个字段(StreetName varchar、HouseNumber int、HouseNumberComplement varchar),您只需按StreetName、HouseNumber、HouseNumberComplement进行排序即可。谢谢您的回答,但这对我不起作用,我已经找到了解决方案。将街道地址分成3个值
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:]]', '')