Значение разделения от одного поля до два

У меня есть поле таблицы membername который содержит и фамилию и имя пользователей. Действительно ли возможно разделить тех, которые в 2 поля memberfirst, memberlast?

Все записи имеют этот формат "Firstname Lastname" (без кавычек и промежуточного пространства).

120
задан Rahil Wazir 24 December 2014 в 14:32
поделиться

3 ответа

К сожалению, MySQL не поддерживает функцию разделения строк. Однако вы можете создать для этого пользовательскую функцию , например, описанную в следующей статье:

С этой функцией:

DELIMITER $$

CREATE FUNCTION SPLIT_STR(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255) DETERMINISTIC
BEGIN 
    RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');
END$$

DELIMITER ;

вы можете составить свой запрос следующим образом:

SELECT SPLIT_STR(membername, ' ', 1) as memberfirst,
       SPLIT_STR(membername, ' ', 2) as memberlast
FROM   users;

Если вы предпочитаете не использовать пользовательскую функцию и не возражаете, чтобы запрос был немного более подробным, вы также можете сделать следующее:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(membername, ' ', 1), ' ', -1) as memberfirst,
       SUBSTRING_INDEX(SUBSTRING_INDEX(membername, ' ', 2), ' ', -1) as memberlast
FROM   users;
221
ответ дан 24 November 2019 в 01:35
поделиться

используйте этот

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX( `membername` , ' ', 2 ),' ',1) AS b, 
SUBSTRING_INDEX(SUBSTRING_INDEX( `membername` , ' ', -1 ),' ',2) AS c FROM `users` WHERE `userid`='1'
7
ответ дан 24 November 2019 в 01:35
поделиться

Единственный случай, когда вам может понадобиться такая функция, - это запрос UPDATE, который изменит вашу таблицу, чтобы сохранить имя и фамилию в отдельных полях.

Дизайн базы данных должен соответствовать определенным правилам, и Нормализация базы данных является одним из наиболее важных

3
ответ дан 24 November 2019 в 01:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: