如何在Oracle SQL中找到匹配字符串条件的部分而不是另一个的所有条目



我有一个这样的列:

tbody> <<tr>
Values
111.111.111-Dummy
111.111.111-Dummy2
111.111.111——X
222.222.222-Dummy
222.222.222-Dummy2
333.333.333-Dummy
333.333.333-Dummy2
333.333.333——X
select substr(values_, 1, instr(values_, '-') - 1) as numbers
from   {your-table}
group  by substr(values_, 1, instr(values_, '-') - 1)
having count(case when values_ like '%-X' then 1 end) = 0;

values在Oracle中是一个保留关键字,因此它不能是标识符(如列名);我通过添加一个下划线来改变它。

注意,这里假设所有的"值"后面跟一个破折号和一个(可能为空的)字符串。如果您可能也有像111.11.1111这样的值(末尾没有破折号),那么必须稍微修改查询,但我假设没有任何值-否则您应该在示例中包含一个或两个。

having子句中使用not like:

select substring_index(values, '-', 1)
from t
group by substring_index(values, '-', 1)
having sum(values like '%-x') = 0;

最新更新