sql >> Database >  >> RDS >> PostgreSQL

Reguliere expressie in PostgreSQL LIKE-clausule

Zoals @a_horse opmerkte, zou je de reguliere expressie-operator ~ . moeten gebruiken om haakjesuitdrukkingen te gebruiken.
Maar er is meer. Ik stel voor:

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

^ ... komt overeen met het begin van de tekenreeks (uw originele uitdrukking kan overeenkomen met elke positie).
[^0] ... een haakje-uitdrukking (tekenklasse) die overeenkomt met elke teken dat niet 0 . is .

Of beter , maar toch:

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

Waarom? LIKE is niet zo krachtig, maar doorgaans sneller dan reguliere expressies. Het is waarschijnlijk aanzienlijk sneller om het aantal kandidaten te beperken met een goedkope LIKE uitdrukking.

Over het algemeen gebruikt u NOT LIKE '__0' , maar aangezien we al LIKE '00%' in het andere predikaat kunnen we het smallere (goedkopere) patroon gebruiken NOT LIKE '000' .

Postgres kan een eenvoudige btree index . gebruiken voor de links verankerde uitdrukkingen value LIKE '00%' (belangrijk voor grote tabellen), terwijl dat misschien niet werkt voor een complexere reguliere expressie. De nieuwste versie van Postgres kan indexen gebruiken voor eenvoudige reguliere expressies, dus misschien werk voor dit voorbeeld. Details:

  • Verschil tussen LIKE en ~ in Postgres


  1. SQL Server Reguliere expressies in T-SQL

  2. MariaDB SCHEMA() uitgelegd

  3. Formatteer sysjobhistory datetime &duration Kolommen in SQL Server

  4. Bestanden in een map weergeven met SQL Server