Ini mengambil smhg dari sini dan singkat dari indeks Terakhir dari substring yang diberikan di MySQL dan menggabungkan mereka. Ini untuk mysql, yang saya butuhkan adalah untuk mendapatkan nama yang layak menjadi first_name last_name dengan nama belakang satu kata, nama pertama semuanya sebelum kata tunggal itu, di mana namanya bisa nol, 1 kata, 2 kata, atau lebih dari 2 kata. Yaitu: Null; Mary; Mary Smith; Mary A. Smith; Mary Sue Ellen Smith;
Jadi, jika nama adalah satu kata atau nol, nama belakang adalah nol. Jika nama adalah> 1 kata, last_name adalah kata terakhir, dan first_name semua kata sebelum kata terakhir.
Perhatikan bahwa saya sudah memangkas hal-hal seperti Joe Smith Jr.; Joe Smith Esq. dan seterusnya, secara manual, yang menyakitkan, tentu saja, tetapi cukup kecil untuk melakukan itu, jadi Anda ingin memastikan untuk benar-benar melihat data di bidang nama sebelum memutuskan metode mana yang akan digunakan.
Perhatikan bahwa ini juga memangkas hasilnya, jadi Anda tidak berakhir dengan spasi di depan atau setelah nama.
Saya hanya memposting ini untuk orang lain yang mungkin google jalan di sini mencari apa yang saya butuhkan. Ini berfungsi, tentu saja, mengujinya dengan pilih dulu.
Ini masalah satu kali, jadi saya tidak peduli efisiensi.
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
)
);