Сортировка по «фамилии» в MySQL, когда «полное имя» содержит точки - PullRequest
5 голосов
/ 25 февраля 2010

Я нашел этот изящный маленький порядок по условию, который прекрасно сортирует строки типа «Первый последний», даже правильно обрабатывая «Первый Ван Черт».

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

Теперь у меня есть некоторые имена, такие как "Альфред Э. Ньюман", и я хочу, чтобы сортировка работала для этого имени должным образом (т. Е. Она не попадает в E).

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

9 голосов
/ 25 февраля 2010

Если вы действительно хотите это сделать, как на счет

RIGHT(p.name, LOCATE(' ', REVERSE(p.name)) - 1)
0 голосов
/ 25 февраля 2010

Я не думаю, что вы можете сделать это автоматически и надежно. Например, как бы вы автоматически сказали, что Хуан Карлос Перес идет на P, а Ричард Мильхус Никсон идет на N?

Вам придется использовать эвристику и словарь имен или что-то подобное, и в некоторых случаях это всегда будет неудачным. Лучше всего делать то, что говорит Джульетта: обработать данные, чтобы сгенерировать кандидатов на проверку, и разделить столбец имени на три (или четыре) столбца: FirstName, MiddleInitial, LastName.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...