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

Wyrażenie regularne w klauzuli PostgreSQL LIKE

Jak skomentował @a_horse, musiałbyś użyć operatora wyrażenia regularnego ~ aby używać wyrażeń w nawiasach.
Ale to nie wszystko. Proponuję:

SELECT *
FROM   tbl
WHERE  value ~ '^00[^0]'

^ ... pasuje na początek ciągu (Twoje oryginalne wyrażenie może pasować w dowolnym pozycja).
[^0] ... wyrażenie w nawiasie (klasa znaków) pasujące do dowolnego znak, który nie jest 0 .

Lub lepiej , jeszcze:

SELECT *
FROM   tbl
WHERE  value LIKE '00%'       -- starting with '00'
AND    value NOT LIKE '000%'  -- third character is not '0'

Czemu? LIKE nie jest tak potężny, ale zazwyczaj szybszy niż wyrażenia regularne. Prawdopodobnie znacznie szybciej można zawęzić listę kandydatów za pomocą taniego LIKE wyrażenie.

Ogólnie rzecz biorąc, użyjesz NOT LIKE '__0' , ale ponieważ już ustaliliśmy LIKE '00%' w drugim predykacie możemy użyć węższego (tańszego) wzorca NOT LIKE '000' .

Postgres może używać prostego indeksu drzewa btree dla wyrażeń zakotwiczonych z lewej strony value LIKE '00%' (ważne w przypadku dużych tabel), podczas gdy może to nie zadziałać w przypadku bardziej złożonego wyrażenia regularnego. Najnowsza wersja Postgresa może używać indeksów do prostych wyrażeń regularnych, więc może pracuj dla tego przykładu. Szczegóły:

  • Różnica między LIKE i ~ w Postgresie


  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 sprawdzić, czy upsert był aktualizacją z PostgreSQL 9.5+ UPSERT?

  2. Jak używać EXECUTE FORMAT ... USING w funkcji postgres

  3. Uaktualnić kolumnę PostgreSQL JSON do JSONB?

  4. Jak sprawić, by wyliczenia Java i Postgres współpracowały ze sobą w celu aktualizacji?

  5. PostgreSQL LIKE wariacje wydajności zapytań