У меня есть поле таблицы membername
который содержит и фамилию и имя пользователей. Действительно ли возможно разделить тех, которые в 2 поля memberfirst
, memberlast
?
Все записи имеют этот формат "Firstname Lastname" (без кавычек и промежуточного пространства).
К сожалению, 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;
используйте этот
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX( `membername` , ' ', 2 ),' ',1) AS b,
SUBSTRING_INDEX(SUBSTRING_INDEX( `membername` , ' ', -1 ),' ',2) AS c FROM `users` WHERE `userid`='1'
Единственный случай, когда вам может понадобиться такая функция, - это запрос UPDATE, который изменит вашу таблицу, чтобы сохранить имя и фамилию в отдельных полях.
Дизайн базы данных должен соответствовать определенным правилам, и Нормализация базы данных является одним из наиболее важных