DB に次のデータを持つ列があります (複数の名前をランダムな文字で区切るのは間違っていることはわかっています)
「ジョン・キューザック | タンディ・ニュートン | キウェテル・イジョフォー」
これらの人々を配列に分割して後で使用できるようにしたい、または単に以下のように表示できるようにしたい
John Cusack
Thandie Newton
Chiwetel Ejiofor
任意のアイデアを事前に感謝してください
DB に次のデータを持つ列があります (複数の名前をランダムな文字で区切るのは間違っていることはわかっています)
「ジョン・キューザック | タンディ・ニュートン | キウェテル・イジョフォー」
これらの人々を配列に分割して後で使用できるようにしたい、または単に以下のように表示できるようにしたい
John Cusack
Thandie Newton
Chiwetel Ejiofor
任意のアイデアを事前に感謝してください
これを試すことができます。
select substring_index(substring_index('a|b|c|h', '|',@r:=@r+1),'|',-1) zxz
from (select @r:=0) x,
(select 'x' xx union select 'v' xx union select 'z' xx union select 'p' xx) z;
結果は次のようになります
----
|zxz|
-----
|a |
------
|b |
------
|c |
------
|h |
------
ロケートはこちら: Mysqlと 少し変更。
覚えておいてください: 結合ステートメントの「カウント」は、デリミタと同じでなければなりません。
敬具
あなたが言うように、区切りリストを RDBMS に格納することは本当に良い考えではありません。ただし、目的の結果を取得するなど、MySQL の文字列操作関数を使用できる場合がありますSUBSTRING_INDEX()
(MySQL には配列型がないため、単にデータを分割しようとしているだけだと思います)。
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(my_column, '|', 1), -1),
SUBSTRING_INDEX(SUBSTRING_INDEX(my_column, '|', 2), -1),
SUBSTRING_INDEX(SUBSTRING_INDEX(my_column, '|', 3), -1)
FROM my_table
SUBSTRING_INDEX()
リストの最初と最後の要素に対して実際に 2 回呼び出す必要はないことに注意してください。
気が向いたら、見つかった各要素を一時テーブルに入力する文字列をループ処理するストアド プロシージャを作成することもできますが、これはすべて「良い習慣」からかけ離れているため、これ以上掘り下げる価値はほとんどありません。