sql >> Databasteknik >  >> RDS >> PostgreSQL

Istället för LIKE och ~, varför bara SILKENAR fungerar när man gör regex-matchning med alternativ

LIKE stöder mönstermatchning med _ för ett enskilt tecken och % för alla teckensekvenser så här:

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

fungerar inte eftersom LIKE inte förstår (...) för gruppering eller | omväxlande är det bara bokstavliga tecken i ett LIKE-mönster.

SIMILAR TO stöder _ och % samma som LIKE men lägger till gruppering med (...) , omväxlande med | , och några andra saker så här:

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

fungerar som förväntat.

~* använder POSIX regex så (...) är för gruppering och | är för alternering men % är bara ett procenttecken; det betyder att detta:

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

letar efter en h eller x omgiven av procenttecken och fungerar inte som du förväntar dig.

Din ~* version kommer att fungera om du använder ett 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 som länkas till ovan täcker allt detta.



  1. Ta bort HTML-taggar från posten

  2. Hur man får poster från de senaste 30 dagarna

  3. SQL Server Stored Procedures från Oracle®

  4. org.hibernate.internal.util.config.ConfigurationException:Kunde inte hitta cfg.xml-resursen [/HibernateTest/src/hibernate.cfg.xml]