sql >> Databasteknik >  >> RDS >> Oracle

Använder LIKE i en Oracle IN-klausul

Det som skulle vara användbart här skulle vara en LIKE ANY predikat som är tillgängligt i PostgreSQL

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

Tyvärr är den syntaxen inte tillgänglig i Oracle. Du kan utöka det kvantifierade jämförelsepredikatet med OR , dock:

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

Eller alternativt, skapa en semi-join med en EXISTS predikat och en extra array-datastruktur (se denna fråga för 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
)

För sann fulltextsökning kanske du vill titta på Oracle Text:http://www.oracle.com/technetwork/database/enterprise-edition/index-098492.html



  1. Hur man jämför prestanda för MySQL &MariaDB med SysBench

  2. Skapa en trigger i Oracle Express

  3. Finns det en officiell rekommendation från Oracle om användningen av explicita ANSI JOINs kontra implicita joins?

  4. Hur skapar och frågar jag länkade databasservrar i SQL Server?