sql >> Database teknologi >  >> RDS >> Oracle

Brug af LIKE i en Oracle IN-klausul

Det, der ville være nyttigt her, ville være en LIKE ANY prædikat som er tilgængeligt i PostgreSQL

SELECT * 
FROM tbl
WHERE my_col LIKE ANY (ARRAY['%val1%', '%val2%', '%val3%', ...])

Desværre er den syntaks ikke tilgængelig i Oracle. Du kan udvide det kvantificerede sammenligningsprædikat ved at bruge OR dog:

SELECT * 
FROM tbl
WHERE my_col LIKE '%val1%' OR my_col LIKE '%val2%' OR my_col LIKE '%val3%', ...

Eller alternativt, opret en semi join ved at bruge en EXISTS prædikat og en hjælpematrixdatastruktur (se dette spørgsmål for detaljer):

SELECT *
FROM tbl t
WHERE EXISTS (
  SELECT 1
  -- Alternatively, store those values in a temp table:
  FROM TABLE (sys.ora_mining_varchar2_nt('%val1%', '%val2%', '%val3%'/*, ...*/))
  WHERE t.my_col LIKE column_value
)

For ægte fuldtekstsøgning vil du måske se på Oracle Text:http://www.oracle.com/technetwork/database/enterprise-edition/index-098492.html



  1. Hvad er forskellen mellem MySQL og SQL?

  2. SQL Server REPLACE() vs TRANSLATE():Hvad er forskellene?

  3. GIN-indeks på smallint[]-kolonnen bruges ikke, eller fejloperatoren er ikke unik

  4. Transparent Data Encryption (TDE) i SQL Server i en AlwaysOn Availability Group på eksempel