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

Намерете редове, където текстовият масив съдържа стойност, подобна на въведената

Също така е важно да разберете, че ANY ене оператора но SQL конструкция, която може да се използва само вдясно на оператор. Още:

  • Как да използвам ANY вместо IN в клауза WHERE с Rails?

LIKE оператор - или по-точно:израз , което се пренаписва с в ~~ оператор в Postgres вътрешно - очаква стойността вляво и шаблонът надясно. Няма COMMUTATOR за този оператор (както има за простия оператор за равенство = ), така че Postgres не може да обръща операндите.

Вашият опит:

select * from someTable where '%someInput%' LIKE ANY(someColum);

е обърнал левия и десния операнд, така че '%someInput%' е стойността и елементи от колоната на масива someColum се приемат за шаблони (което не е това, което искате).

Това ще трябва да е ANY(someColum) LIKE '%someInput%' - с изключение на това, че това не е възможно с ANY конструкция, която е разрешена само вдясно на оператор. Тук се натъквате на блокада.

Свързано:

  • Има ли начин за полезно индексиране на текстова колона, съдържаща модели на регулярни изрази?
  • Може ли PostgreSQL да индексира колони от масиви?

Можете да нормализирате своя релационен дизайн и да запазите елементи от масива в отделни редове в отделна таблица. С изключение на това, unnest() е решението, както вече открихте. Но докато се интересувате само от съществуването на поне един съответстващ елемент, EXISTS подзаявката ще бъде най-ефективна, като същевременно избягва дублирането в резултата - Postgres може да спре търсенето веднага щом бъде намерено първото съвпадение:

SELECT *
FROM   tbl
WHERE  EXISTS (
    SELECT -- can be empty 
    FROM   unnest(someColum) elem
    WHERE  elem LIKE '%someInput%'
  );

Може да искате да избягвате специалния символ в someInput . Вижте:

  • Escape функция за регулярен израз или LIKE шаблони

Внимавайте с отрицанието (NOT LIKE ALL (...)). ), когато NULL може да участва:

  • Проверете дали NULL съществува в Postgres масив


  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 9.1+?

  2. Има ли PostgreSQL еквивалент на SQL Server профайлър?

  3. Аритметика на колоната за дата в заявката на PostgreSQL

  4. Как да запазите данните в докеризирана Postgres база данни с помощта на томове

  5. PostgreSQL multi INSERT...RETURNING с множество колони