如果有人问到这个问题,我深表歉意,我无法用语言表达。
我被要求过滤掉查询中的行,其中一个字段的文本包含在另一个字段中。一个例子可能会更好地解释它:
Column_1 Column_2
Low Static Static
Static Static
Static Clear
Static
Very Low Freq Freq
查询结果应该只返回第 3 行和第 4 行,因为第 1、2 和 5 行包含相似的字符串。现在,我有以下条件:
WHERE
((Column_2 NOT LIKE '%' || Column_1 || '%')
OR (Column_1 NOT LIKE '%' || Column_2 || '%' OR Column_1 IS NULL))
但是,当我只想返回第 3 行和第 4 行时,它会返回第 1、3、4 和 5 行。这只是示例数据,我的实际数据集在第 1 列和第 2 列中包含许多不同的文本字符串,因此我可以不要只编写特定的 case 语句来排除列相似的某些实例。
也许这是不可能的,因为我无法将字符串定义为包含在 2 个空格内的内容,同时考虑没有空格的情况?
谢谢
最佳答案
对于你的表达,我认为你想要and
而不是or
:
WHERE ((Column_2 NOT LIKE '%' || Column_1 || '%') AND
(Column_1 NOT LIKE '%' || Column_2 || '%' OR Column_1 IS NULL)
)
您需要两个条件都为真。您可能会发现逻辑更容易遵循:
WHERE NOT (Column_2 LIKE '%' || Column_1 || '%' OR
Column_1 LIKE '%' || Column_2 || '%'
)
关于sql - 在一个字段中查找包含在另一个字段中的文本 Oracle SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24539720/