"String"
やなどの列を含むテーブルがあります。 で囲まれたすべての単語が別々の行になる"Another" simple "string"
新しいテーブルを作成したいと思います。""
私はここのようにしようとしましたが、問題は「正しい」単語の量が行ごとに異なり、文字列内のすべての場所に配置される可能性があることです。
SQL を使用して文字列を分割するのは厄介です。一般に、SQL は各スカラー値を既約として扱います。SQL 式を使用して別のことをしようとすると、足で入力しているように感じます。
私はこれをSQLで解決しません。PHP、Perl、または Python でスクリプトを作成してデータベースからデータを取得し、スクリプト言語が提供する強力な文字列操作関数を使用して、結果をデータベースに挿入します。
あなたのコメントについて:
私が考えることができる唯一の純粋な MySQL ソリューションは、WHILE ループを含むストアド プロシージャを記述し、引用符で囲まれた単語を繰り返し引き出し、引用符で囲まれた単語がなくなるまで文字列を減らすことです。
つまり、このループ アプローチは次の疑似コードのようになります。
WHILE LOCATE('"', STRING) > 0
SET WORD := SUBSTRING_INDEX(...)
INSERT INTO OTHER_TABLE VALUES (WORD)
SET STRING := REPLACE(STRING, '"WORD"', '')
END
これらの各操作は、MySQL 関数を使用して実行できます。
文字列をテストして、引用符が含まれているかどうかを確認できます。
mysql> select locate('"', 'the "quoted" word');
+-------------------------------------+
| locate('"', 'the "quoted" word', 1) |
+-------------------------------------+
| 5 |
+-------------------------------------+
文字列から最初に引用された単語を見つけることができます:
mysql> select substring_index(substring_index('the "quoted" word', '"', 2), '"', -1);
+------------------------------------------------------------------------+
| substring_index(substring_index('the "quoted" word', '"', 2), '"', -1) |
+------------------------------------------------------------------------+
| quoted |
+------------------------------------------------------------------------+
文字列から引用符で囲まれた単語を削除できます。
mysql> select replace('the "quoted" word', concat('"', 'quoted', '"'), '');
+--------------------------------------------------------------+
| replace('the "quoted" word', concat('"', 'quoted', '"'), '') |
+--------------------------------------------------------------+
| the word |
+--------------------------------------------------------------+
最終的な手順のコーディングはお任せします。