仲間に相談

仲間に相談

MySQLのlike文について

Member
編集済: May 2023 仲間に相談

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

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

こんにちは!

It looks like you're new here. Members get access to exclusive content, events, rewards, and more. Sign in or register to get started.
ログイン

コメント

  • こんにちは。

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

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

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

     

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

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

     

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

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

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

    ①01_あるく

    ②02_走る

    ③03_止まる

    ④04_ひたすらあるく

     

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

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

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

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

  • Contributor

    こんにちは。

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

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

     

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

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

     

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

こんにちは!

It looks like you're new here. Members get access to exclusive content, events, rewards, and more. Sign in or register to get started.
ログイン

こんにちは!

It looks like you're new here. Members get access to exclusive content, events, rewards, and more. Sign in or register to get started.
ログイン