按字母顺序而不是字段数

时间:2010-06-10 02:37:42

标签: php mysql

有没有办法按首字母顺序排序mysql结果并忽略数字?例如,我有一个地址列表:

  • 123 Main Street
  • 456 Second Street
  • 234 Third Street

我希望按街道名称排序并忽略街道号码。有一个简单的方法吗?

3 个答案:

答案 0 :(得分:4)

没有真正干净的方式可以100%可靠地获得你想要的东西,而不会将数字和街道分成两个不同的领域。

order by SUBSTRING(address, LOCATE(' ', address))这样的东西会让你大部分都在那里。

这样做是从第一次出现的空格字符到结尾获取地址的子字符串。有效地砍掉'123 Main Street'的'123',所以你要按'Main Street'排序。如果你有街道名称之前有多个空格的东西......祝你好运。从自动化的角度来看,你可以做的并不多。

在大型数据库设置中,这将不是非常好的。在较小的环境中,这可能会很好。如果您的环境较大,或者这对您不起作用,您将不得不设置一个将地址字段预分割到另一个字段以进行排序的作业。

答案 1 :(得分:2)

假设街道号码和街道名称始终以空格分隔。

SELECT ...
...
ORDER BY SUBSTRING(address, FIND_IN_SET(' ', address)+1)

答案 2 :(得分:2)

虽然您可以在ORDER BY子句中应用SUBSTRING(如johncatfish解释),看起来您应该重新设置该表,将该字段分为 Street Number fields。

在这种情况下,任务变得简单:

SELECT Number, Street
FROM Addresses
ORDER BY Street, Number