当我不确定特定列时,根据字符串匹配过滤行

时间:2015-05-20 20:31:57

标签: sql database oracle filter row

有人可以帮我解决SQL查询根据字符串过滤行的问题。

考虑我想要显示包含string ='PARIS'的所有行。没有特别的列提。需要在整个行级别进行过滤。

有可能吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

确实如此,您可以在WHERE子句中包含多个条件,并将其与OR相关联。

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

这将返回yourtablecolumn1等于column2的表yourstring中的所有行。您可以根据需要将其扩展为尽可能多的列。

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

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

修改:如果您不知道您的表格中哪些列,解决此问题的唯一方法就是获取列使用SHOW COLUMNS创建名称并动态构建查询:

SHOW COLUMNS FROM yourtable;

获得列名后,您可以按照多个SELECT条件汇总上述WHERE语句。

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

最重要的是,想想长而硬是否真的无法预先找到列的名称。

答案 1 :(得分:0)

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

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

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