2010-02-24 10 views
5

Ho trovato questo piccolo ordine per condizione che ordina le stringhe del tipo "Primo Ultimo" in modo corretto, gestendo anche "First Van Damn" correttamente.Ordinamento per "cognome" in MySQL quando "nome completo" ha periodi in esso

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

Ora, io ho alcuni nomi in là come "Alfred E. Newman" e vogliono l'ordinamento per funzionare correttamente per quel nome (cioè non finire sotto E).

Qualsiasi aiuto sarebbe molto apprezzato.

+0

Hai "Alfred E. Newman" ma non "Richard Milhous Nixon"? –

+0

In questo caso abbiamo a che fare con i giocatori di baseball, quindi suppongo che debba anche lavorare per "Juan Carlos Perez" per usare un esempio forzato, ordinato sotto P – GrumpyCanuck

+4

Ogni possibilità di ripulire il database aggiungendo il vero FirstName, MiddleInitial, e colonne LastName? Da lì, la colonna Nome può essere un campo calcolato basato su quegli altri tre. – Juliet

risposta

9

Se si vuole veramente farlo, come su

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

Ha funzionato perfettamente, grazie! – GrumpyCanuck

-1

Non penso che sia possibile farlo automaticamente e in modo affidabile. Ad esempio, come diresti automaticamente che Juan Carlos Perez va su P e Richard Milhous Nixon continua su N?

Dovrai utilizzare l'euristica e un dizionario di nomi o qualcosa di simile, che in alcuni casi fallirà sempre. È meglio fare ciò che dice Juliet: elaborare i dati per generare candidati da revisionare e separare la colonna del nome in tre (o quattro) colonne: FirstName, MiddleInitial, LastName.

Problemi correlati