【问题标题】:Searching multiple patterns with single LIKE clause使用单个 LIKE 子句搜索多个模式
【发布时间】:2021-08-22 06:32:42
【问题描述】:

我怎样才能实现这样的目标

SELECT * 
FROM Table_1
WHERE Column_A CONTAINS ("AB" OR "BE" OR "DE");

我有超过 15 个值要放入 contains() 中,因此手动操作会很乏味(我的意思是“A 包含“AB”或 A 包含“BE”等)

感谢任何提示,

【问题讨论】:

  • “包含”是什么意思?你的意思是=
  • 我在工作中使用 SAS,它使用 CONTAINS 表示 LIKE "%word%"。我通过这篇文章了解到这一点。

标签: sql sas proc-sql


【解决方案1】:

试试这个:

SELECT * 
FROM Table_1
WHERE Column_A in ('AB','BE','DE');

这将输出 Table_1 中的所有行,其中 Column_A 具有在 IN CLAUSE 中指定的任何值。所以它基本上可以作为 OR。

注意:如果您将“AB”作为一个整体进行搜索,这将起作用。如果您希望所有行在列值字符串中的任何位置都包含“AB”或“BE”,那么您必须像这样使用 like 子句:

SELECT * 
FROM Table_1
WHERE Column_A like '%AB%' OR Column_A like '%BE%' OR Column_A like '%DE%';

更新:你也可以使用下面的一个,这符合你的目的,你不必写 LIKE 子句 15-20 次。

Create table employee (name varchar(200))
Insert into employee values('ABC')
Insert into employee values('DEF')
Insert into employee values('BCD')
Insert into employee values('EFG')
Insert into employee values('ADC')

SELECT
  distinct name
FROM
  (
    VALUES
      ('%A%'),
      ('%D%')
  ) AS v (pattern)
  CROSS APPLY
  (  -- your query
    SELECT * 
    FROM       employee
    WHERE      name like v.pattern
  ) AS x

【讨论】:

  • in() 寻找相等的值。在这里,我只想包含值。所以如果 A = "RABI" 就可以了,因为它包含 "AB"。
  • 我已经编辑了我的帖子。您需要使用 Like 子句,如第二个查询所示。
  • @lekythos,检查我的最新更新。它会解决你的目的。
  • CROSS APPLY 是 Microsoft SQL Server 扩展。它在 SAS Proc SQL(或我知道的任何其他 SQL 方言)中不存在。
猜你喜欢
  • 2011-04-09
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多