【发布时间】:2015-03-02 22:47:21
【问题描述】:
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, ' ', '') || 替换(REFEV_CATEGORY,'','')||替换(REFEV_USAGE,'','')|| REPLACE(REFEV_BODY_CODE, ' ', '') 作为 UC 从 TREF_ENF_VEHICLE_TYPE ) aa where aa.UC LIKE ('%06TBISUM%')
UC
------
06TBISUM
select * from (select REPLACE(REFEV_VEH_TYPE, ' ', '') || 替换(REFEV_CATEGORY,'','')||替换(REFEV_USAGE,'','')|| REPLACE(REFEV_BODY_CODE, ' ', '') 作为 UC 从 TREF_ENF_VEHICLE_TYPE ) aa where aa.UC LIKE ('%B')
UC
----------
06TGISJB
06TGITJB
select * from (select REPLACE(REFEV_VEH_TYPE, ' ', '') || 替换(REFEV_CATEGORY,'','')||替换(REFEV_USAGE,'','')|| REPLACE(REFEV_BODY_CODE, ' ', '') 作为 UC 从 TREF_ENF_VEHICLE_TYPE ) aa where aa.UC LIKE ('%BAS')
UC
----------
06BCIBAS
05BCABAS
05BCBBAS
我想知道的结果是:
从 ( 选择替换(REFEV_VEH_TYPE,'','')||替换(REFEV_CATEGORY,'','')||替换(REFEV_USAGE,'','')|| REPLACE(REFEV_BODY_CODE, ' ', '') 作为 UC 来自 TREF_ENF_VEHICLE_TYPE ) aa 其中 aa.UC IN LIKE ('%06TBISUM%', '%B','%BAS')。
UC
------
06TBISUM
06TGISJB
06TGITJB
06BCIBAS
05BCABAS
05BCBBAS
我使用的参数是$P{COLUMN}。 我想使用 IN LIKE($P{COLUMN}) 通过 $P{COLUMN} 参数搜索多个。有人知道吗?
【问题讨论】:
-
如果特定行包含多个搜索词(例如
'X1'和'Y1'),您希望发生什么? -
我想知道的结果是当我输入多个 LIKE IN($P{'%06TBISUM%', '%B','%BAS'})。所以我想要结果显示在上面的 3 LIKE 之后。
-
...您可能想使用
TRIM(...)而不是REPLACE(...)- 您正试图摆脱前导/尾随空格,对吗?此外,如果可能的话,对源列运行LIKEs 可能会更快(不过,您仍然无法为其使用索引)。 -
好的。但是在 DB2 中,我不能使用 trim()。但我现在的问题是如何使用 IN 条件获得多个 LIKE 结果?你能检查我的 sql 吗?出了什么问题?。
-
您的第一个问题是您试图将单个变量用作数组,而 DB2 并不真正支持该数组。它认为您要查找单个字符串值,包括逗号,当然没有匹配项。如果您split it to a table,那会更好(然后可以像我在回答中那样使用它)。有一些方法可以在普通递归 CTE 中进行拆分(我已经做到了),但我不太记得我是如何做到的。
标签: sql select db2 sql-like in-operator