質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

2回答

310閲覧

MariaDBのテーブルデータを、特定のキーワードによって分割して検索したい

tetakaha759

総合スコア20

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

1グッド

0クリップ

投稿2023/06/09 01:50

実現したいこと

Maria DBに下記のようなテーブル、およびデータがあります:

MariaDB [test]> desc testTable; +-------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------------+------+-----+---------+-------+ | col1 | varchar(1024) | YES | | NULL | | +-------+---------------+------+-----+---------+-------+ MariaDB [test]> select * from testTable; +---------------------------------------------------------------------------------------------------------------------------+ | col1 +---------------------------------------------------------------------------------------------------------------------------+ | 【カテゴリ1】カテゴリ1の情報【A】【B】【カテゴリ2】カテゴリ2の情報【C】【D】【カテゴリ3】カテゴリ3の情報【E】【F】 +---------------------------------------------------------------------------------------------------------------------------+

これを、下記のようにカラムを分けて検索したいと考えております:

カテゴリ1 カテゴリ2 カテゴリ3 -------------------------- -------------------------- -------------------------- カテゴリ1の情報【A】【B】 カテゴリ2の情報【C】【D】 カテゴリ3の情報【E】【F】

「【カテゴリX】」ごとに文字列を分割し、それぞれの情報のみ検索したいのですが、そのカテゴリ情報の中に【A】【B】といった別の「【】」使う文字列が含まれます。

「カテゴリ1」など、分割の対象となる文字列は固定で、検索結果に含める必要はありません。

このような条件で、カラムを分けて検索する方法をご存じな方がいらっしゃったら、ぜひその方法をご教示いただけませんでしょうか。

試したこと

「regexp_replace」等を使うのかと考えましたが、分割したい文字列内に「【】」がさらに含まれているなどして、正規表現の条件指定が見出せない状態でいます。

補足情報(FW/ツールのバージョンなど)

MariaDB 10.6.5

takanaweb5👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

常識的にはこんなデータのもたせ方はしないのが1番ですが、どうしてもというのであればこんな感じでどうでしょう?

SQL

1create table tbl(col1 text,col2 json as (concat('{"dummy":"',regexp_replace(col1,'【(カテゴリ.)】','","$1":"'),'"}'))); 2insert into tbl(col1) values 3('【カテゴリ1】カテゴリ1の情報【A】【B】【カテゴリ2】カテゴリ2の情報【C】【D】【カテゴリ3】カテゴリ3の情報【E】【F】'), 4('【カテゴリ1】カテゴリ1の情報【G】【カテゴリ3】カテゴリ3の情報【H】'), 5('【カテゴリ1】カテゴリ1の情報【I】【J】【K】【カテゴリ2】カテゴリ2の情報【L】【M】'); 6 7select 8json_value(col2,'$."カテゴリ1"') as `カテゴリ1`, 9json_value(col2,'$."カテゴリ2"') as `カテゴリ2`, 10json_value(col2,'$."カテゴリ3"') as `カテゴリ3` 11 FROM tbl

投稿2023/06/09 10:25

yambejp

総合スコア114968

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tetakaha759

2023/06/09 13:28

ご回答、ありがとうございます。 残念ながら、データの構造はパッケージソフトを使っている関係上、自分ではどうにもできない状態なのです。。 何でもかんでも1つのカラムに詰め込んでいて、ほとほと困っていました。
guest

0

ベストアンサー

  • 【カテゴリ1】と【カテゴリ2】に囲まれた文字列
  • 【カテゴリ2】と【カテゴリ3】に囲まれた文字列
  • 【カテゴリ3】から最後までの文字列

この3つを取得したいという認識で正しいでしょうか? であれば以下のようなクエリになるかと思います。

SQL

1SELECT 2 SUBSTRING(col1, INSTR(col1,'【カテゴリ1】')+CHAR_LENGTH('【カテゴリ1】'), INSTR(col1,'【カテゴリ2】')-INSTR(col1,'【カテゴリ1】')-CHAR_LENGTH('【カテゴリ1】')), 3 SUBSTRING(col1, INSTR(col1,'【カテゴリ2】')+CHAR_LENGTH('【カテゴリ2】'), INSTR(col1,'【カテゴリ3】')-INSTR(col1,'【カテゴリ2】')-CHAR_LENGTH('【カテゴリ2】')), 4 SUBSTRING(col1, INSTR(col1,'【カテゴリ3】')+CHAR_LENGTH('【カテゴリ3】')) 5FROM testTable;

投稿2023/06/09 08:28

neko_the_shadow

総合スコア2259

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tetakaha759

2023/06/09 13:26

ご回答、ありがとうございました! まさに、私がやりたかったことをご回答いただいたので、ベストアンサーとさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問