sql >> Database >  >> RDS >> PostgreSQL

In plaats van LIKE en ~, waarom werkt alleen VERGELIJKBAAR MET als regex-match met alternatieven wordt uitgevoerd?

LIKE ondersteunt patroonherkenning met _ voor elk enkel teken en % voor elke reeks tekens, dus dit:

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

werkt niet omdat LIKE (...) . niet begrijpt voor groeperen of | voor afwisseling zijn dat slechts letterlijke karakters in een LIKE-patroon.

VERGELIJKBAAR MET ondersteunt _ en % hetzelfde als LIKE maar voegt groepering toe met (...) , afwisseling met | , en een paar andere dingen dus dit:

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

werkt zoals verwacht.

~* gebruikt POSIX-regexen dus (...) is voor groeperen en | is voor afwisseling maar % is slechts een procentteken; dat betekent dat dit:

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

is op zoek naar een h of x omgeven door procenttekens en werkt niet zoals u verwacht.

Uw ~* versie werkt als je een goede regex gebruikt zoals:

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

De documentatie waarnaar hierboven is gelinkt, dekt dit allemaal.



  1. SSIS-taak voor het importeren van inconsistente kolommentelling?

  2. Hoe een gezouten wachtwoord uit de database en auth-gebruiker intrekken?

  3. Een MySQL/MariaDB-database exporteren

  4. Wat is DATALENGTH() in SQL Server?