MySQL SQL

【MySQL】特定の文字で文字列を分割する

投稿日:2021年7月7日 更新日:

概要

データベースにおいて、一つのカラム内に文字列が入っており、特定の文字列で分割したいケースがたまにあります。今回はMySQLで特定の文字列を境に分割する方法についてメモします。

 

 

環境

  • MySQL 5.5.62

準備

以下のようなSQLでテスト用のデータを作成します。

CREATE TABLE testdb.sltest(
    col1 varchar(10)
);

INSERT INTO testdb.sltest (col1) VALUES ('I am');
INSERT INTO testdb.sltest (col1) VALUES ('He is');
INSERT INTO testdb.sltest (col1) VALUES ('They are');

以下のようなテーブルとデータが出来上がります。

col1
I am
He is
They are

今回は文字列の間に半角スペースを入れています。これを分割していきます。

 

SUBSTRINGとLOCATEの組み合わせで分割

SUBSTRINGは文字列の抽出ができる関数です。一方、LOCATEは特定の文字の位置を返すことができる関数です。この二つを組み合わせることで、特定の文字を見つけ出して分割することができます。

それぞれの関数の引数は以下の通り

SUBSTRING(カラム名, 抽出開始文字位置, 抽出終了文字位置)

LOCATE(特定文字, カラム名)

組み合わせた例は以下のようなSQLです。

SELECT
    col1
    ,SUBSTRING(col1,1,LOCATE(' ',col1)-1) AS col2
	,SUBSTRING(col1,LOCATE(' ',col1)+1,LENGTH(col1)) AS col3
FROM
    testdb.sltest

この結果は以下のようになります。主語と述語がうまく分割され、別カラムとして抽出できました。

col1col2col3
I amIam
He isHeis
They areTheyare

今回は間の空白が不要だったため、LOCATE(‘ ‘,col1)-1とLOCATE(‘ ‘,col1)+1のように±1で文字位置を調整していますが、残したい場合はこの値を0にしてうまく調整するとどちらかに残すことができます。

以上

-MySQL, SQL

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

A5M2のテーブルエディタでNULL値に戻す方法

Contents1 概要2 実証環境3 ケース4 NULLに戻したいとき5 データ型が文字列以外の場合 概要 データベースのSQL開発ツールとして無料で使用でき、高機能なA5M2というツールがあります …

PHPからMySQLのデータを取得する

Contents1 目的2 環境3 準備4 コード5 結果 目的 PHPからMySQLのデータを取得する方法についてメモします。これができるとjavascriptを使用し、web画面上にデータベースの …

【MySQL】phpMyAdminでデータベースが見えない場合の対処法

Contents1 症状2 調査3 原因4 対処 症状 phpMyAdminでMySQLのデータベースエクスポートを実施しようと思い、ログインしたところ何故かinformation_schemaしか表 …

【PostgreSQL】前後の行を取得できるLAG LEAD関数の使い方

Contents1 概要2 環境3 準備4 LAG(), LEAD()の使い方4.1 SQL例4.2 結果4.3 SQL例4.4 結果5 便利な例5.1 SQL例5.2 結果 概要 PostgreSQ …

Rundeck のデータベース設定(MySQL)

Contents1 目的2 環境3 MySQLのインストール4 RDB Datasourceの設定5 注意点 目的 ジョブ管理ツールのRundeckはデフォルトでH2 Databaseが組み込まれ、こ …

言語切り替え

カテゴリー