1
  SELECT *
  FROM XYZ
  WHERE column1 IN (X1,Y1,Z1);

この選択クエリでLIKEを使用したい。以下のクエリのように、INを使用してLIKEステートメントを作成するにはどうすればよいですか。

  SELECT * 
  FROM XYZ 
  WHERE column1 LIKE IN  ($P{COLUMN});

もう一つの例:-

select * from ( select REPLACE(REFEV_VEH_TYPE, ' ', '') || REPLACE(REFEV_CATEGORY, ' ', '') || REPLACE(REFEV_USAGE, ' ', '') || REPLACE(REFEV_BODY_CODE, ' ', '' ) TREF_ENF_VEHICLE_TYPE からの UC として) aa aa.UC LIKE ('%06TBISUM%')

UC
------
06TBISUM

select * from ( select REPLACE(REFEV_VEH_TYPE, ' ', '') || REPLACE(REFEV_CATEGORY, ' ', '') || REPLACE(REFEV_USAGE, ' ', '') || REPLACE(REFEV_BODY_CODE, ' ', '' ) TREF_ENF_VEHICLE_TYPE からの UC として) aa どこで aa.UC LIKE ('%B')

 UC
----------
06TGISJB
06TGITJB

select * from ( select REPLACE(REFEV_VEH_TYPE, ' ', '') || REPLACE(REFEV_CATEGORY, ' ', '') || REPLACE(REFEV_USAGE, ' ', '') || REPLACE(REFEV_BODY_CODE, ' ', '' ) TREF_ENF_VEHICLE_TYPE からの UC として) aa aa.UC LIKE ('%BAS')

UC
----------
06BCIBAS
05BCABAS
05BCBBAS

私が知りたい結果は次のとおりです。

select * from ( select REPLACE(REFEV_VEH_TYPE, ' ', '') || REPLACE(REFEV_CATEGORY, ' ', '') || REPLACE(REFEV_USAGE, ' ', '') || REPLACE(REFEV_BODY_CODE, ' ', '' ) TREF_ENF_VEHICLE_TYPE からの UC として) aa ここで aa.UC IN LIKE ( '%06TBISUM%', '%B','%BAS' ).

UC
------
06TBISUM
06TGISJB
06TGITJB
06BCIBAS
05BCABAS
05BCBBAS

私が使用するパラメータは$P{COLUMN}です。IN LIKE($P{COLUMN})を使って$P{COLUMN}パラメータで複数検索したいのですが、どなたかご存知ないでしょうか?

4

3 に答える 3

1

LIKE 操作は、複数の OR 操作と機能的に同等です。そう..

  SELECT *
  FROM XYZ
  WHERE ( column1 like 'X1' OR column1 like 'X2' OR column1 like 'X3' )
于 2015-01-07T17:31:35.163 に答える
0

試す

ここで、REGEXP_LIKE(aa.UC,'.+[06TBISUM.*|B|BAS].+')

+ を * に置き換えます (* を入れるとイタリック体に変換されます)

于 2017-01-31T15:41:09.100 に答える
-1

DB2 では単一の変数を配列として使用することはできませんが、再帰的な CTE で分割できます。

関数を定義する必要のないバージョンは次のとおりです。

WITH Split AS (SELECT '' AS value, txt, LOCATE(',', txt) AS nxt
               FROM (VALUES($P{COLUMN})) t(txt)
               UNION ALL
               SELECT DECODE(nxt, 0, txt, SUBSTR(txt, 1, nxt - 1)),
                      DECODE(nxt, 0, '', SUBSTR(txt, nxt + 1)),
                      DECODE(txt, '', 0, LOCATE(',', txt, nxt + 1))
               FROM Split
               WHERE LENGTH(txt) > 0), 

     SearchData AS (SELECT value
                    FROM Split
                    WHERE value <> '')

SELECT uc
FROM (SELECT REPLACE(refev_veh_type, ' ', '') 
              || REPLACE(refev_category, ' ', '') 
              || REPLACE(refev_usage, ' ', '') 
              || REPLACE(refev_body_code, ' ', '') AS uc
      FROM TRef_ENF_Vehicle_Type ) T
JOIN SearchData
  ON T.uc LIKE SearchData.value

(手元に DB2 インスタンスがないため、テストしていません)

$P{COLUMN}には、次の文字列が含まれていると想定されます: '%06TBISUM%,%B,%BAS'.

于 2015-01-05T12:53:38.200 に答える