都道府県穴埋めゲーム

MySQL5.5です
PostgreSQLからMySQLへ移行作業をしています
PostgreSQLの配列型(文字)をMySQLのBLOB型にして格納しています

{"ABC", "EFG"}といった形式で格納しているのですが
以下のSQL文をMySQLで使用できる形にしたいのです
SELECT * FROM table WHERE Test[1] LIKE '%%'
TestがPostgreSQLでの配列になります

エラーメッセージは以下の通りです
db_query error. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[1] like '%%'

以下のようにAS句で適当な名称を与えて引き出せないかと考えたのですが、「Unknown column 'tst'」となり取得することはできませんでした
SELECT *, REPLACE(SUBSTRING(Test, 1, LOCATE(',',Test) - 1), '{', '') AS tst FROM table WHERE tst LIKE '%%';

何か良い方法などありましたら教えてください、よろしくお願いします

A 回答 (2件)

where 句内では、select 句のカラム名が決まる前に行選択作業が行われるので、select句の別名は使えません。

where 句内で演算を行うか、または、from table 指定にサブクエリーを使うとか。

分解して取り出したいのではなく、検索だけならlike比較の形式をととのえればいいのでは?
Test like '{"%a%","%"}'/* 配列1番目比較用 */
Test like '{"%","%b%"}'/* 配列2番目比較用 */
Test like '{"%","%b%","%"}'/* 配列サイズに応じて記述 */
    • good
    • 0

普通に正規化してABCとEFGを別レコードで管理したらよいのでは?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す


おすすめ情報