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

Zamiast LIKE i ~, dlaczego tylko SIMILAR TO działa podczas dopasowywania wyrażeń regularnych z alternatywami

LIKE obsługuje dopasowywanie wzorców za pomocą _ dla dowolnego pojedynczego znaku i % dla dowolnej sekwencji znaków, więc to:

SELECT 'thomas' LIKE '%(h|x)%'

nie działa, ponieważ LIKE nie rozumie (...) do grupowania lub | naprzemiennie są to tylko dosłowne znaki we wzorze LIKE.

PODOBNE DO obsługuje _ i % to samo co LIKE, ale dodaje grupowanie za pomocą (...) , na przemian z | i kilka innych rzeczy, więc to:

SELECT 'thomas' SIMILAR TO '%(h|x)%'

działa zgodnie z oczekiwaniami.

~* używa wyrażeń regularnych POSIX, więc (...) służy do grupowania i | jest na przemian, ale % to tylko znak procentowy; oznacza to, że:

SELECT 'thomas' ~* '%(h|x)%'

szuka h lub x otoczony znakami procentowymi i nie działa tak, jak tego oczekujesz.

Twój ~* wersja będzie działać, jeśli użyjesz prawidłowego wyrażenia regularnego, takiego jak:

SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x'   -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]'  -- or a character class

Dokumentacja połączona z powyższym obejmuje to wszystko.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL 9.3:Dynamiczna tabela przestawna

  2. Błąd podczas mapowania tablic postgres w Spring JPA

  3. Różnica między tekstem a varchar (różne znaki)

  4. Wzorce i modyfikatory szablonów do formatowania daty/godziny w PostgreSQL

  5. PostgreSQL:Auto-inkrementacja w oparciu o wielokolumnowe unikatowe ograniczenie