MySQLのlike文について

tokupon
tokupon Member
編集済: 5月 2023 仲間に相談

MySQLにて特定のカラム内より、特定のテキストを含むレコードのみ抽出をしたいです。
以下のような構文を使用しておりますが、正しく抽出されません。
SELECT * FROM [テーブル名] WHERE [カラム名] LIKE '%抽出しない文字列%';

今回抽出しようとしているカラム内の文字列は平均で500文字前後あり、絵文字や_-などの記号も使用してあります。
※レコードによって、文章のはじめに抽出したい文字列が出てくるものもあれば、末尾に出てくるものもあり、前者であれば、ビーストモードで対応可能で、後者は使用文字のバイト数の関係で抽出不可でした。
こちらSQLでも同じ影響がありますでしょうか?

コメント

  • こんにちは。

    ビーストモードでは、確かに文字列操作をするとバイト数の問題がありますね。

    「MySql」⇒「Redshift」で試してみてはいかがでしょうか。

    ※Redshiftは日本語名は使用出来ませんので注意してください。

     

    絵文字がどのようなモノを指しているか分かりませんが

    通常STRINGとして扱われるものは、抽出出来るかと思います。

     

    試しにMySqlで試してみました。

    下記のデータがある場合に「like '%_あるく%'」とした場合、

    想定では①のみ抽出されたいが、実際は①と④が抽出されました。

    ①01_あるく

    ②02_走る

    ③03_止まる

    ④04_ひたすらあるく

     

    なので特定文字「_」などを別の文字列「XXXXXX」とかに置き換えてから、

    抽出し再度置換するのが良いかもしれません。。。

    これはやはり、ビーストモードや検索と同じような動きですね。

  • 置換に関しても、対象セル内の文字数が多いためか正しく変換できないようです。
    色々試しましたが、正しく変換できないので、他の方法を考えます。

  • honda
    honda Contributor

    こんにちは。

    エラー理由が「対象セル内の文字が多いため」であれば、SQL内にある一時テーブルのフィールド長を変更するのはいかがでしょうか。

    例:ALTER TABLE  テーブル名 MODIFY フィールド名 データ型

     

    以前同様のケースがあった際に、テーブルの文字列長を変更して回避したケースがありました。

    (仕様変更等で、もうできなくなっていたらすみません・・・)

     

    ご確認よろしくお願いいたします。