【问题标题】:Filter rows according to a string match, when i am unsure of specific column [duplicate]当我不确定特定列时,根据字符串匹配过滤行[重复]
【发布时间】:2015-08-02 07:12:11
【问题描述】:

有人可以帮助我在 SQL Query 上根据字符串过滤行吗?

考虑我想显示包含字符串 = 'PARIS' 的所有行。没有具体的专栏可提。需要在整个行级别进行过滤。

有可能吗?

提前致谢。

【问题讨论】:

  • 您是否需要搜索您知道其列的特定表的所有列,或者您必须在运行时确定其列的任何给定表的所有列?您熟悉LIKE 运算符吗?无论如何,这是可能的,但如果您自己在解决方案上付出更多努力,您会发现这里的社区更有帮助。
  • 是的,即使我不确定该表中有多少列以及列名是什么。

标签: sql database oracle filter row


【解决方案1】:

据我所知,没有特定的语法可以做到这一点。您可以像这样构建您的查询:-

DECLARE @YOURSTRING NVARCHAR(50)
SET @YOURSTRING = 'PARIS'

SELECT * FROM YOURTABLE
WHERE COLUMN1 LIKE '%' + @YOURSTRING + '%'
OR COLUMN2 LIKE '%' + @YOURSTRING + '%'
OR....etc...etc..

【讨论】:

  • 垫子,我不确定表中有多少列以及列名是什么。
【解决方案2】:

这确实是可能的,您可以在WHERE 子句中有多个条件,并将它们与OR 链接。

SELECT * FROM yourtable
    WHERE yourtable.column1 = 'yourstring'
        OR yourtable.column2 = 'yourstring'

这将返回表yourtable 中的所有行,其中column1column2 等于yourstring。您可以根据需要将其扩展到任意数量的列。

请注意,如果您想查找包含您的字符串的字段,您必须使用带有通配符的LIKE 语法:

SELECT * FROM yourtable
    WHERE yourtable.column1 LIKE '%yourstring%'
        OR yourtable.column2 LIKE '%yourstring%'

编辑:如果您事先不知道表中有哪些列,我知道解决此问题的唯一方法是获取该列名称使用SHOW COLUMNS 并动态构建您的查询:

SHOW COLUMNS FROM yourtable;

在获得列名后,您可以按照上述方法将SELECT 语句与多个WHERE 条件组合在一起。

但是请注意,这可能会导致问题,因为您最终可能会在 id 列等中进行搜索,从业务角度来看,这可能不应该包括在内。或者更糟糕的是,您最终可能会向最终用户提供他/她不应该拥有的信息。

归根结底,仔细想想你是否真的无法事先找出列的名称。

【讨论】:

  • 蒂姆,我不确定表中有多少列以及列名是什么。
  • 看看我的编辑。
猜你喜欢
  • 1970-01-01
  • 2011-10-02
  • 2017-12-23
  • 2017-08-02
  • 2021-02-23
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多