sql >> Database teknologi >  >> RDS >> PostgreSQL

I stedet for LIKE og ~, hvorfor kun SIMILAR TO virker, når man laver regex-match med alternativer

LIKE understøtter mønstermatchning ved hjælp af _ for ethvert enkelt tegn og % for enhver sekvens af tegn, så dette:

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

virker ikke, fordi LIKE ikke forstår (...) til gruppering eller | for alternering er det kun bogstavelige tegn i et LIKE-mønster.

SIMILAR TO understøtter _ og % det samme som LIKE men tilføjer gruppering med (...) , skiftevis med | , og et par andre ting, så dette:

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

fungerer som forventet.

~* bruger POSIX regexes så (...) er til gruppering og | er til alternering, men % er kun et procenttegn; det betyder, at dette:

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

leder efter en h eller x omgivet af procenttegn og virker ikke, som du forventer det.

Din ~* version vil fungere, hvis du bruger et korrekt regex som:

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

Dokumentationen, der er linket til ovenfor, dækker alt dette.



  1. Hvordan skal jeg gemme en GUID i Oracle?

  2. percentiler fra histogramdata

  3. Brug af Jenkins med Kubernetes AWS, del 1

  4. SQL-datatyper:5 værste valg, du skal stoppe i dag