我无法为我的问题找到正确的查询。我在数据库中有一个表,我需要以非常具体的方式对其进行排序 - 我正在排序的列是一个地址,它以数字开头,但我需要忽略数字对其进行排序。
这是我的数据集:
id | address
1 | 23 Bridge road
2 | 14 Kennington street
3 | 7 Bridge road
4 | 12 Oxford street
5 | 9 Bridge road
我需要这样排序:
id | address
1 | 7 Bridge road
2 | 9 Bridge road
3 | 23 Bridge road
4 | 14 Kennington street
5 | 12 Oxford street
到目前为止我只得到了这个:
SELECT id, address
FROM propertySearch
Order by address ASC.
谁能帮我解决这个问题?
最佳答案
如果这将始终是那种格式(前导数字,一个空格,然后是地址),那么你可以这样做:
SQL 服务器:
SELECT * FROM YourTable t
ORDER BY SUBSTRING(t.address,CHARINDEX(' ',t.address,1),99)
MySQL:
SELECT * FROM YourTable t
ORDER BY SUBSTRING_INDEX(t.address,' ',-1)
如果格式不固定,可以使用 SQL-Server patindex()
:
SELECT * FROM YourTable t
ORDER BY SUBSTRING(t.address,PATINDEX('%[A-z]%',t.address),99)
注意:这是糟糕的数据库设计!!每个值都应正确存储在其自己的列中,例如 STREET
、 CITY
、 APARTMANT_NUMBER
等,因为如果不这样做,它们就会导致这个.
关于sql - 如何按字母顺序对 SQL 查询进行排序但忽略前导数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38849360/