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, ' ', '' ) as UC from TREF_ENF_VEHICLE_TYPE ) aa where aa.UC LIKE ('%06TBISUM%')

UC
------
06TBISUM

select * from ( select REPLACE(REFEV_VEH_TYPE, ' ', '') || REPLACE(REFEV_CATEGORY, ' ', '') || REPLACE(REFEV_USAGE, ' ', '') || REPLACE(REFEV_BODY_CODE, ' ', '' ) 作为 UC 来自 TREF_ENF_VEHICLE_TYPE ) 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, ' ', '' ) 作为 UC 从 TREF_ENF_VEHICLE_TYPE ) 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 回答