MySQLのlike文について
MySQLにて特定のカラム内より、特定のテキストを含むレコードのみ抽出をしたいです。
以下のような構文を使用しておりますが、正しく抽出されません。
SELECT * FROM [テーブル名] WHERE [カラム名] LIKE '%抽出しない文字列%';
今回抽出しようとしているカラム内の文字列は平均で500文字前後あり、絵文字や_-などの記号も使用してあります。
※レコードによって、文章のはじめに抽出したい文字列が出てくるものもあれば、末尾に出てくるものもあり、前者であれば、ビーストモードで対応可能で、後者は使用文字のバイト数の関係で抽出不可でした。
こちらSQLでも同じ影響がありますでしょうか?
コメント
-
こんにちは。
ビーストモードでは、確かに文字列操作をするとバイト数の問題がありますね。
「MySql」⇒「Redshift」で試してみてはいかがでしょうか。
※Redshiftは日本語名は使用出来ませんので注意してください。
絵文字がどのようなモノを指しているか分かりませんが
通常STRINGとして扱われるものは、抽出出来るかと思います。
試しにMySqlで試してみました。
下記のデータがある場合に「like '%_あるく%'」とした場合、
想定では①のみ抽出されたいが、実際は①と④が抽出されました。
①01_あるく
②02_走る
③03_止まる
④04_ひたすらあるく
なので特定文字「_」などを別の文字列「XXXXXX」とかに置き換えてから、
抽出し再度置換するのが良いかもしれません。。。
これはやはり、ビーストモードや検索と同じような動きですね。
1 -
置換に関しても、対象セル内の文字数が多いためか正しく変換できないようです。
色々試しましたが、正しく変換できないので、他の方法を考えます。0 -
こんにちは。
エラー理由が「対象セル内の文字が多いため」であれば、SQL内にある一時テーブルのフィールド長を変更するのはいかがでしょうか。
例:ALTER TABLE テーブル名 MODIFY フィールド名 データ型
以前同様のケースがあった際に、テーブルの文字列長を変更して回避したケースがありました。
(仕様変更等で、もうできなくなっていたらすみません・・・)
ご確認よろしくお願いいたします。
1