1

csvファイル(毎回100万データを超えるファイル)を使用して更新され続ける4000万レコードを超えるインベントリの巨大なinnoDBテーブルがあります。Load Data Infileデータをテーブルにインポートするメソッドを使用します。

テーブルには、各在庫品目の一意の識別子である part_number という名前のフィールドがあります。このフィールドのデータには、「-」、「_」、「#」、「$」、「」などの特殊文字が 1 つ以上含まれています。

例えば。Abcd-1234

エンド ユーザーが part_number をキーワードとして使用してこのテーブルを検索する機能があります。検索には 3 つのタイプがあります a) 完全一致 b) 次を含む c) 次で始まる

私の要件は、「-」、「_」、「#」、「$」、「」などの文字なしで検索した場合でも、ユーザーに特殊文字を含む結果を表示することです.

例えば。ユーザーは Abcd1234 を検索して結果 Abcd-1234 を取得できる必要があります。ユーザーは Abcd-1234 を検索して結果 Abcd1234 を取得できる必要があります ユーザーは Abcd_1234 を検索して結果 Abcd1234 と Abcd-1234 を取得できる必要があります

注: 挿入中のテーブル ロックと他のいくつかの依存関係を回避するために、テーブルをそのままにしておくことを余儀なくされていますInnoDB

句読点を省略して part_number を格納する新しい列を追加し、そのフィールドに対して検索を実行することは、私が考えた解決策でしたが、データのインポートプロセスに影響を与えるため、受け入れられません..

REGEXP を試してみましたが、私の基準に合うようには成功しませんでした。私の基準は次のとおりです。a)ユーザーは特殊文字の有無にかかわらず検索できますb)part_numberフィールドのデータにはどこにも特殊文字が含まれている場合と含まれていない場合がありますc)いずれの場合でも結果を表示できる必要があります..

この問題を解決する方法があれば教えてください..

4

4 に答える 4

3

これを試してみてください、それはあなたを助けます
Select REPLACE(cname, '-', '') as cna From country HAVING cna LIKE '%APRE29192%'

于 2012-10-10T03:52:28.690 に答える
0

おそらく、REGEXP を調べて、ニーズに合った正規表現を作成できます: http://dev.mysql.com/doc/refman/5.1/en/regexp.html

于 2012-10-01T19:07:36.807 に答える
0

解決策の 1 つは、 MySql TABLE VIEWを使用することです。ここでは、英数字の part_numberタグを含む列を検索できます。

于 2015-10-14T18:08:09.960 に答える