1. ホーム
  2. mysql

[解決済み] 1つのフィールドから2つのフィールドに値を分割する

2022-08-03 19:03:19

質問

テーブルのフィールド 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;