2010-02-24 52 views
5

我發現這個漂亮的小訂單,條件是很好地對「First Last」類型的字符串進行排序,甚至正確處理「First Van Damn」。在「全名」有句點的情況下,在MySQL中按「姓」排序

"SUBSTRING(p.name, LOCATE(' ', p.name) +1) 

現在,我有一些名字在那裏,像「艾爾弗雷德·E·紐曼」和要進行排序,以該名稱正常工作(即它不E'的結束)。

任何幫助將不勝感激。

+0

你有「艾爾弗雷德·E·紐曼」,而不是「理查德·米爾豪斯·尼克松」? – 2010-02-24 21:52:32

+0

在這種情況下,我們正在處理棒球運動員,所以我想它也需要爲「胡安卡洛斯佩雷斯」使用一個人爲的例子,按P – GrumpyCanuck 2010-02-24 21:56:25

+4

排序任何機會,你可以通過添加真正的FirstName,MiddleInitial,和LastName列?從那裏,你的姓名欄可以是基於其他三位的計算字段。 – Juliet 2010-02-24 21:56:50

回答

9

如果你真的想這樣做,怎麼樣

RIGHT(p.name, LOCATE(' ', REVERSE(p.name)) - 1) 
+0

工作完美,謝謝! – GrumpyCanuck 2010-02-24 23:40:57

-1

我不認爲你可以自動和可靠地做到這一點。例如,你會如何自動地告訴胡安卡洛斯佩雷斯去P和理查德Milhous尼克松繼續N?

你將不得不使用啓發式和名字或類似的字典,並且在某些情況下,這將總是失敗。最好做朱麗葉所說的:處理數據以生成審查候選人,並將名稱列分成三個(或四個)列:FirstName,MiddleInitial,LastName。