sql >> Databáze >  >> RDS >> PostgreSQL

Proč místo LIKE a ~ funguje pouze SIMILAR TO, když provádíte shodu regulárních výrazů s alternativami

LIKE podporuje shodu se vzorem pomocí _ pro jakýkoli jednotlivý znak a % pro jakoukoli sekvenci znaků, takže toto:

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

nefunguje, protože LIKE nerozumí (...) pro seskupování nebo | pro alternaci jsou to pouze doslovné znaky ve vzoru LIKE.

SIMILAR TO podporuje _ a % stejné jako LIKE, ale přidává seskupení pomocí (...) , střídání s | , a několik dalších věcí, takže toto:

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

funguje podle očekávání.

~* používá regulární výrazy POSIX, takže (...) je pro seskupování a | je pro alternaci, ale % je jen znak procenta; to znamená, že toto:

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

hledá h nebo x obklopený znaky procenta a nefunguje tak, jak očekáváte.

Váš ~* verze bude fungovat, pokud použijete správný regulární výraz jako:

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

Dokumentace, na kterou odkazuje výše, toto vše pokrývá.



  1. Aktualizace databáze sqlite pro android

  2. SELECT nebo INSERT řádek v jednom příkazu

  3. Algoritmus, aby se zabránilo vkládání SQL na MSSQL Server z kódu C#?

  4. Jak velká může být databáze MySQL, než začne klesat výkon