a=XXXXX&b=YYYYY&z=ZZZZ
の入った項目をカラムとします。
a
mid(カラム,3,instr(カラム,'&b=')-3)
b
mid(カラム,instr(カラム,'&b='),instr(カラム,'&z=')-instr(カラム,'&b=')-3)
c
right(カラム,LENGTH(カラム)-instr(カラム,'&z=')-3)
それぞれ このようにして 抽出すればいいでしょう。
select mid(カラム,3,instr(カラム,'&b=')-3) a,mid(カラム,instr(カラム,'&b='),instr(カラム,'&z=')-instr(カラム,'&b=')-3) b,right(カラム,LENGTH(カラム)-instr(カラム,'&z=')-3) c from テーブル名
こんな 感じで使います。
▽2
●
うぃんど ●250ポイント ベストアンサー |
MySQLの正規表現は「条件にマッチするかどうかの判定だけ」なので出番は無し
http://dev.mysql.com/doc/refman/5.1/ja/regexp.html
基本形的な単純例
CREATE TEMPORARY TABLE t (カラム TEXT); INSERT INTO t VALUES('a=XXXXX&b=YYYYY&z=ZZZZ'); SELECT SUBSTRING_INDEX( SUBSTRING_INDEX( カラム, 'a=', -1 ), '&', 1 ) AS a, SUBSTRING_INDEX( SUBSTRING_INDEX( カラム, 'b=', -1 ), '&', 1 ) AS b, SUBSTRING_INDEX( SUBSTRING_INDEX( カラム, 'z=', -1 ), '&', 1 ) AS z FROM t;
歯抜けのあるデータを対象とする場合の改造例
CREATE TEMPORARY TABLE t (カラム TEXT); INSERT INTO t VALUES ('a=XXXXX&b=YYYYY&z=ZZZZ'), ('a=XXXXX&z=ZZZZ'), ('b=YYYYY&z=ZZZZ') ; SELECT CASE WHEN INSTR(カラム,'a=') THEN SUBSTRING_INDEX( SUBSTRING_INDEX( カラム, 'a=', -1 ), '&', 1 ) ELSE '' END AS a, CASE WHEN INSTR(カラム,'b=') THEN SUBSTRING_INDEX( SUBSTRING_INDEX( カラム, 'b=', -1 ), '&', 1 ) ELSE '' END AS b, CASE WHEN INSTR(カラム,'z=') THEN SUBSTRING_INDEX( SUBSTRING_INDEX( カラム, 'z=', -1 ), '&', 1 ) ELSE '' END AS z FROM t;