4

テーブルに 4 つの列があります。これはデータのクリーンアップ タスクに近いので、パフォーマンスについては特にこだわりません。それでも、可能なオプションを知りたいです。

以下のクエリを見てください。

SELECT * FROM dsopi_person_addr_rule ADDR WHERE 
addr.src_address_line1 LIKE '%DEP%' 
OR addr.src_address_line2 LIKE '%DEP%'
OR addr.src_address_line3 LIKE '%DEP%'
OR addr.src_address_line4 LIKE '%DEP%';

DEP と同様に、あと 10 件の一致があります。4 つの住所行すべてに対して各一致を繰り返す必要があります。それを行うより良い方法はありますか?私は個人的に何度も書くのが嫌いです。

**更新:以下が答えです

SELECT *
FROM dsopi_person_addr_rule ADDR
WHERE regexp_like (UPPER(addr.src_address_line1),      'DEP|DPT$|ABT|DIP.|DIPART|AFDEL|AVDEL|AVD.|DIV|PGRD|PGP|PPG')
4

3 に答える 3

2

regexp_like関数を試すことができます

于 2012-10-18T19:54:32.843 に答える
0
CREATE VIEW VW_dsopi_person_addr_rule
AS
  SELECT Primary_key
       , src_address_line1 AS src_address_line
    FROM dsopi_person_addr_rule
   UNION
  SELECT Primary_key
       , src_address_line2
    FROM dsopi_person_addr_rule
   UNION
  SELECT Primary_key
       , src_address_line3
    FROM dsopi_person_addr_rule
  SELECT Primary_key
       , src_address_line4
    FROM dsopi_person_addr_rule

DELETE FROM VW_dsopi_person_addr_rule
  WHERE Primary_key in (SELECT Primary_key
                          FROM VW_dsopi_person_addr_rule
                         WHERE src_address_line like '%DEP%)

DELETE D1 FROM VW_dsopi_person_addr_rule D1
  WHERE EXISTS (SELECT 1
                  FROM VW_dsopi_person_addr_rule V1
                 WHERE V1.Primary_key_value1 = D1.Primary_key_value1
                   AND V1.Primary_key_value2 = D1.Primary_key_value2
                   AND V1.src_address_line like '%DEP%')
于 2012-10-18T19:55:34.063 に答える
0

「DEP」部分をパラメーターとして入力して、ストアード・プロシージャーを作成してみてください。次に、すべてのストアド プロシージャ呼び出しの結果を連結します。

于 2012-10-18T19:47:19.947 に答える