如何在DB2中使用LIKE和IN?

14
SELECT * FROM abc WHERE column1 IN (a1,b1,c1)

我想在这个SELECT查询中使用LIKE语句;我该如何编写带有IN的LIKE语句,类似于以下查询:

SELECT * FROM abc WHERE column1 LIKE IN (a%,b%,c%)
4个回答

12

你不能将likein组合在一起。请将它们分别作为比较条件:

select column1
from abc
where column1 like 'a%' or column1 like 'b%' or column1 like 'c%'

6
你无法这样做。将其写为:

你不能这样做。

column1 LIKE 'a%' OR column1 LIKE 'b%' OR column1 LIKE 'c%'

3

如其他人所说,您可以使用OR条件列表来指定条件。

您还可以在from子句中使用临时表或子查询。以下是from子句中子查询的示例:

select column1
   from abc
   , table(
       (select 'a%' as term from SYSIBM.SYSDUMMY1)
       union all
       (select 'b%' from SYSIBM.SYSDUMMY1)
       union all
       (select 'c%' from SYSIBM.SYSDUMMY1)
   ) search_list
   where abc.column1  like search_list.term;

我不是DB2专家。在from子句中的这个子查询不符合ANSI语法。 - Justin Swanhart
1
在DB2中,它可能是类似于...FROM abc,(SELECT 'a%' AS term FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT 'b%' FROM SYSIBM.SYSDUMMY1 UNION ALL SELECT 'c%' FROM SYSIBM.SYSDUMMY1) search_list WHERE ...的东西。 - Andriy M
使用SYSIBM.SYSDUMMY1进行编辑(我猜这相当于MySQL或Oracle中的FROM DUAL) - Justin Swanhart
我不确定在这种情况下是否需要 table。我的意思是,虽然 table()(即使它被 DB2 支持)似乎用于将标量值“转换”为行,但 SELECT 已经返回了一组行,我也不是 DB2 专家。 - Andriy M
我不知道。我在这里看到它被使用了(http://www.cs.newpaltz.edu/~pletcha/DB/db2_TempTables.html),然后复制了它 :) 我是一个MySQL和Oracle(偶尔也用MS SQL)的人。 - Justin Swanhart
我明白了,谢谢,现在看起来合理了。顺便点个赞给你的回答。我意识到目前这个查询似乎有些繁琐,但是如果VALUES构造器(如果在DB2的派生表上下文中可用)可以使用,它可能会更加优雅。 - Andriy M

0
如果你真的想查找以a、b或c开头的字符串,可以选择以下方式:
SELECT * 
FROM abc
WHERE LEFT(column1, 1) IN ('a', 'b', 'c')

我假设你的情况实际上更加复杂,但也许你可以根据自己的需求调整这个片段...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接