Dies dauert smhg von hier und Curt's von letzten Index eines bestimmten Teilstrings in MySQL und kombiniert sie. Dies ist für MySQL. Alles, was ich brauchte, war eine anständige Aufteilung des Namens in Vorname Nachname mit dem Nachnamen ein einzelnes Wort, der Vorname alles vor diesem einzelnen Wort, wobei der Name null, 1 Wort, 2 Wörter oder sein könnte mehr als 2 Wörter. Dh: Null; Maria; Mary Smith; Mary A. Smith; Mary Sue Ellen Smith;
Wenn der Name also ein Wort oder null ist, ist der Nachname null. Wenn der Name> 1 Wort ist, ist der Nachname das letzte Wort und der Vorname alle Wörter vor dem letzten Wort.
Beachten Sie, dass ich bereits Dinge wie Joe Smith Jr. abgeschnitten habe. Joe Smith Esq. und so weiter, manuell, was natürlich schmerzhaft war, aber es war klein genug, um dies zu tun. Sie sollten also sicherstellen, dass Sie sich die Daten im Namensfeld wirklich ansehen, bevor Sie sich für eine Methode entscheiden.
Beachten Sie, dass dadurch auch das Ergebnis gekürzt wird, sodass Sie keine Leerzeichen vor oder nach den Namen erhalten.
Ich poste dies nur für andere, die sich hierher googeln und nach dem suchen, was ich brauche. Dies funktioniert natürlich, testen Sie es zuerst mit der Auswahl.
Es ist eine einmalige Sache, daher ist mir Effizienz egal.
SELECT TRIM(
IF(
LOCATE(' ', `name`) > 0,
LEFT(`name`, LENGTH(`name`) - LOCATE(' ', REVERSE(`name`))),
`name`
)
) AS first_name,
TRIM(
IF(
LOCATE(' ', `name`) > 0,
SUBSTRING_INDEX(`name`, ' ', -1) ,
NULL
)
) AS last_name
FROM `users`;
UPDATE `users` SET
`first_name` = TRIM(
IF(
LOCATE(' ', `name`) > 0,
LEFT(`name`, LENGTH(`name`) - LOCATE(' ', REVERSE(`name`))),
`name`
)
),
`last_name` = TRIM(
IF(
LOCATE(' ', `name`) > 0,
SUBSTRING_INDEX(`name`, ' ', -1) ,
NULL
)
);