PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Вместо LIKE и ~, защо само SIMILAR TO работи, когато правите съвпадение на регулярни изрази с алтернативи

LIKE поддържа съвпадение на шаблон с помощта на _ за всеки единичен знак и % за произволна последователност от знаци, така че това:

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

не работи, защото LIKE не разбира (...) за групиране или | за редуване, това са просто буквални знаци в модел LIKE.

ПОДОБНО НА поддържа _ и % същото като LIKE, но добавя групиране с (...) , редуване с | , и няколко други неща, така че това:

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

работи според очакванията.

~* използва POSIX регулярни изрази, така че (...) е за групиране и | е за редуване, но % е само знак за процент; това означава, че това:

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

търси h или x заобиколен от знаци за проценти и не работи така, както очаквате.

Вашият ~* версията ще работи, ако използвате правилен регулярен израз като:

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

Документацията, свързана с по-горе, обхваща всичко това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Текущото състояние на управление на архивиране с отворен код за PostgreSQL

  2. ГРЕШКА:низ в кавички без край на или близо

  3. Как да посочите раздел в предния край на postgres COPY

  4. Защо неподписано цяло число не е налично в PostgreSQL?

  5. Форматирайте месеца с римски цифри в PostgreSQL