Split value from one field to two

前端 未结 14 2408
面向向阳花
面向向阳花 2020-11-22 03:49

I\'ve got a table field membername which contains both the last name and the first name of users. Is it possible to split those into 2 fields memberfirst<

14条回答
  •  无人共我
    2020-11-22 04:12

    This takes smhg from here and curt's from Last index of a given substring in MySQL and combines them. This is for mysql, all I needed was to get a decent split of name to first_name last_name with the last name a single word, the first name everything before that single word, where the name could be null, 1 word, 2 words, or more than 2 words. Ie: Null; Mary; Mary Smith; Mary A. Smith; Mary Sue Ellen Smith;

    So if name is one word or null, last_name is null. If name is > 1 word, last_name is last word, and first_name all words before last word.

    Note that I've already trimmed off stuff like Joe Smith Jr. ; Joe Smith Esq. and so on, manually, which was painful, of course, but it was small enough to do that, so you want to make sure to really look at the data in the name field before deciding which method to use.

    Note that this also trims the outcome, so you don't end up with spaces in front of or after the names.

    I'm just posting this for others who might google their way here looking for what I needed. This works, of course, test it with the select first.

    It's a one time thing, so I don't care about efficiency.

    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
        ) 
    );
    

提交回复
热议问题