こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

MySQL 配列もどきを条件式に

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 '%%';

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

投稿日時 - 2011-08-16 21:48:11

QNo.6947234

すぐに回答ほしいです

質問者が選んだベストアンサー

where 句内では、select 句のカラム名が決まる前に行選択作業が行われるので、select句の別名は使えません。where 句内で演算を行うか、または、from table 指定にサブクエリーを使うとか。

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

投稿日時 - 2011-08-17 11:57:58

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

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

投稿日時 - 2011-08-17 11:03:10

あなたにオススメの質問