PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Znajdź wiersze, w których tablica tekstowa zawiera wartość podobną do input

Ważne jest również, aby zrozumieć, że ANY jest nie operator ale konstrukcja SQL, której można używać tylko w prawo operatora. Więcej:

  • Jak używać ANY zamiast IN w klauzuli WHERE w Railsach?

LIKE operator - a dokładniej:wyrażenie , który jest przepisany z do ~~ operator w Postgresie wewnętrznie - oczekuje wartości po lewej stronie i wzór w prawo. Nie ma COMMUTATOR dla tego operatora (tak jak w przypadku prostego operatora równości = ), więc Postgres nie może odwracać operandów.

Twoja próba:

select * from someTable where '%someInput%' LIKE ANY(someColum);

zamienił lewy i prawy operand, więc '%someInput%' jest wartością i elementy kolumny tablicy someColum są uważane za wzorce (co nie jest tym, czego chcesz).

byłoby musi być ANY(someColum) LIKE '%someInput%' - z wyjątkiem tego, że nie jest to możliwe w przypadku ANY konstrukcja, która jest dozwolona tylko po prawej operatora. Trafiasz na blokadę drogi.

Powiązane:

  • Czy istnieje sposób na przydatne indeksowanie kolumny tekstowej zawierającej wzorce wyrażeń regularnych?
  • Czy PostgreSQL może indeksować kolumny tablicy?

Możesz znormalizować swój projekt relacyjny i zapisać elementy tablicy w osobnych wierszach w osobnej tabeli. Poza tym unnest() jest rozwiązaniem, jakie już znalazłeś. Ale chociaż interesuje Cię tylko istnienie co najmniej jednego pasującego elementu, EXISTS podzapytanie będzie najskuteczniejsze, unikając duplikatów w wynikach — Postgres może zatrzymać wyszukiwanie zaraz po znalezieniu pierwszego dopasowania:

SELECT *
FROM   tbl
WHERE  EXISTS (
    SELECT -- can be empty 
    FROM   unnest(someColum) elem
    WHERE  elem LIKE '%someInput%'
  );

Możesz chcieć uciec przed znakiem specjalnym w someInput . Zobacz:

  • Funkcja wyjścia dla wyrażeń regularnych lub wzorców LIKE

Ostrożnie z negacją (NOT LIKE ALL (...) ) gdy NULL może być zaangażowany:

  • Sprawdź, czy w tablicy Postgres istnieje NULL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zapisywać dane z tabel R do PostgreSQL za pomocą autoinkrementacji klucza podstawowego?

  2. Jak znaleźć rozmiar dysku tabeli Postgres / PostgreSQL i jej indeksy?

  3. dołącz do dwóch różnych tabel i usuń zduplikowane wpisy

  4. Poprawka:„operator nie istnieje:liczba całkowita || liczba całkowita” w PostgreSQL

  5. Zmniejszanie parametru postgresql.conf na raz