Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询(对街道地址进行排序)_Mysql_Sql - Fatal编程技术网

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:]]', '')