How to split the name string in mysql?

后端 未结 16 2310
轮回少年
轮回少年 2020-11-22 11:44

How to split the name string in mysql ?

E.g.:

name
-----
Sachin ramesh tendulkar
Rahul dravid

Split the name like firstname

16条回答
  •  北荒
    北荒 (楼主)
    2020-11-22 11:48

    DELIMITER $$
    
    DROP FUNCTION IF EXISTS `split_name`$$
    
    CREATE FUNCTION split_name (p_fullname TEXT, p_part INTEGER)
    RETURNS TEXT
        READS SQL DATA
    BEGIN
        DECLARE v_words INT UNSIGNED;
        DECLARE v_name TEXT;
    
        SET p_fullname=RTRIM(LTRIM(p_fullname));
    
        SET v_words=(SELECT SUM(LENGTH(p_fullname) - LENGTH(REPLACE(p_fullname, ' ', ''))+1));
    
        IF v_words=1 THEN 
            IF p_part=1 THEN
                SET v_name=p_fullname;
            ELSEIF p_part=2 THEN
                SET v_name=NULL;
            ELSEIF p_part=3 THEN
                SET v_name=NULL;
            ELSE
                SET v_name=NULL;
            END IF; 
        ELSEIF v_words=2 THEN 
            IF p_part=1 THEN
                SET v_name=SUBSTRING(p_fullname, 1, LOCATE(' ', p_fullname) - 1);
            ELSEIF p_part=2 THEN
                SET v_name=SUBSTRING(p_fullname, LOCATE(' ', p_fullname) + 1);
            ELSEIF p_part=3 THEN
                SET v_name=NULL;
            ELSE
                SET v_name=NULL;
            END IF; 
        ELSEIF v_words=3 THEN 
            IF p_part=1 THEN
                SET v_name=SUBSTRING(p_fullname, 1, LOCATE(' ', p_fullname) - 1);
            ELSEIF p_part=2 THEN
                SET p_fullname=SUBSTRING(p_fullname, LOCATE(' ', p_fullname) + 1);
                SET v_name=SUBSTRING(p_fullname, 1, LOCATE(' ', p_fullname) - 1);
            ELSEIF p_part=3 THEN
                SET p_fullname=REVERSE (SUBSTRING(p_fullname, LOCATE(' ', p_fullname) + 1));
                SET p_fullname=SUBSTRING(p_fullname, 1, LOCATE(' ', p_fullname) - 1);
                SET v_name=REVERSE(p_fullname);
            ELSE
                SET v_name=NULL;
            END IF; 
        ELSEIF v_words>3 THEN 
            IF p_part=1 THEN
                SET v_name=SUBSTRING(p_fullname, 1, LOCATE(' ', p_fullname) - 1);
            ELSEIF p_part=2 THEN
                SET p_fullname=REVERSE(SUBSTRING(p_fullname, LOCATE(' ', p_fullname) + 1));
                SET p_fullname=SUBSTRING(p_fullname, LOCATE(' ', p_fullname,SUBSTRING_INDEX(p_fullname,' ',1)+1) + 1);
                SET v_name=REVERSE(p_fullname);
            ELSEIF p_part=3 THEN
                SET p_fullname=REVERSE (SUBSTRING(p_fullname, LOCATE(' ', p_fullname) + 1));
                SET p_fullname=SUBSTRING(p_fullname, 1, LOCATE(' ', p_fullname) - 1);
                SET v_name=REVERSE(p_fullname);
            ELSE
                SET v_name=NULL;
            END IF;
        ELSE
            SET v_name=NULL;
        END IF;
     RETURN v_name; 
    END;
    

    SELECT split_name('Md. Obaidul Haque Sarker',1) AS first_name,
    split_name('Md. Obaidul Haque Sarker',2) AS middle_name,
    split_name('Md. Obaidul Haque Sarker',3) AS last_name
    

提交回复
热议问题