it-swarm.com.de

Wie verwende ich die SQL-LIKE-Bedingung mit mehreren Werten in PostgreSQL?

Gibt es eine kürzere Möglichkeit, nach mehreren Übereinstimmungen zu suchen:

 SELECT * 
 from table 
 WHERE column LIKE "AAA%" 
    OR column LIKE "BBB%" 
    OR column LIKE "CCC%"

Diese Frage gilt für PostgreSQL 9.1, aber wenn es eine generische Lösung gibt, wäre sie noch besser.

27
sorin

Vielleicht würde SIMILAR TO funktionieren?

SELECT * from table WHERE column SIMILAR TO '(AAA|BBB|CCC)%';
35
tozka

Verwenden von Array- oder Set-Vergleichen:

create table t (str text);
insert into t values ('AAA'), ('BBB'), ('DDD999YYY'), ('DDD099YYY');

select str from t
where str like any ('{"AAA%", "BBB%", "CCC%"}');

select str from t
where str like any (values('AAA%'), ('BBB%'), ('CCC%'));

Es ist auch möglich, eine AND zu machen, was mit einem Regex nicht einfach wäre, wenn er einer beliebigen Reihenfolge entsprechen würde:

select str from t
where str like all ('{"%999%", "DDD%"}');

select str from t
where str like all (values('%999%'), ('DDD%'));
19
Clodoaldo Neto

Verwenden Sie LIKE ANY(ARRAY['AAA%', 'BBB%', 'CCC%']) für diesen coolen Trick, den @maniek heute gezeigt hat .

16
Craig Ringer

Sie können den Operator für reguläre Ausdrücke ( ~ ) verwenden, getrennt durch ( | ) wie unter Pattern Matching beschrieben

select column_a from table where column_a ~* 'aaa|bbb|ccc'
1
Diego

Möglicherweise können Sie IN verwenden, wenn Sie tatsächlich keine Platzhalterzeichen benötigen. 

WÄHLEN * aus der Tabelle WO Spalte IN ("AAA", "BBB", "CCC")

0
ACT