私は SQL の初心者なので、誰かがこれを説明してくれることを願っています。「SQL クエリで複数の文字列を置換する」の投稿に従ってみましたが、行き詰まりました。
上記の投稿の発信者と同じことをしようとしていますが、異なるテーブルと異なるフィールドを使用しています。ShiptoPlant
テーブル " "の次のフィールド " "BTST
に 3 つのレコードがあるとします (私のテーブルには実際には何千ものレコードがあります)...
テーブル名: BTST
---------------
| ShiptoPlant |
| ----------- |
| Plant #1 |
| Plant - 2 |
| Plant/3 |
---------------
SQL画面に入力しようとしているものは次のとおりです。
SELECT CASE WHEN ShipToPlant IN ("#", "-", "/") Then ""
ELSE ShipToPlant END FROM BTST;
メッセージが表示され続けます (エラー 3075)...
"Syntax error (missing operator) in query expression
'CASE WHEN ShiptoPlant IN (";","/"," ") Then "" ELSE ShipToPlant END'."
"*"
ワイルドカードであるため、キーボードのすべての文字に対してこの操作を実行したいと考えています。
あなたが提供できるどんな助けも大歓迎です!
編集:コメントから追加された背景情報
私は、2008 暦年の 14 のサプライヤーそれぞれから明細項目の請求書レベルのデータを収集しました。サプライヤーから提供された植物名を正規化しようとしています。
各サプライヤーは、プラントを異なる名前で呼ぶことができます。
マスター リストにあるSignode Serviceは、サプライヤーによって呼び出される可能性があります
Signode Service
Signode - Service.
SignodeSvc
SignodeService
最初の 10 文字を参照する一連のリンクを作成することにより、マスター リストを使用して植物を識別できるように、英数字以外の文字を削除しようとしています。一致しない場合は、8 文字、6、4...
私の基本的なハングアップは、テーブルから英数字を削除する方法がわからないことです。この操作は複数の列で実行しますが、他の列を編集するために個別のクエリを作成する予定でした。
おそらく、すべての英数字を削除する一括更新クエリを実行する必要があります。書き方がいまいちわかりません。これが、すべてのスペースを取り除くために私が始めたものです。うまくいきましたが、置換をネストしようとすると失敗しました
UPDATE BTST SET ShipToPlant = replace(ShipToPlant," ","");
EDIT 2:コメントから取得した詳細情報
毎月、工場名の最大 100 の新しい順列が明細請求書データに表示されます。これは、数千の請求書レコードを表す可能性があります。各植物名の順列に決定的な名前の master_id を割り当てるための迅速で汚い方法を構築しようとしています。私が確認できる最善の方法は、植物、住所、都市、および州のフィールドを調べることですが、これの問題は、これらのフィールドにもさまざまな順列があることです。たとえば、
128 Brookview Drive
128 Brookview Lane
英数字を取り出して行うことで
LEFT(PlantName,#chars) & _
LEFT(Address,#chars) & _
LEFT(City,#chars) & _
LEFT(State,#chars)
また、請求書データとマスター工場リスト (両方のテーブルに工場、住所、都市、州のフィールドが含まれています) の間で一致が見つかるまで文字数を変更すると、最終的に一致を見つけることができます。もちろん、入力する文字数を減らし始めるLEFT
と、精度が低下します。私はこれをExcelで行い、まともな収量がありました。誰もがより良い解決策を推奨できますか?