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

Разделете колоната на няколко реда в Postgres

В Postgres 9.3+ използвайте LATERAL присъединете се:

SELECT s.token, flag
FROM   tbl t, unnest(string_to_array(t.subject, ' ')) s(token)
WHERE  flag = 2;

Това е имплицитно LATERAL присъединяване. Ако unnest() не връща никакви редове (празен или NULL subject). ), резултатът изобщо няма да бъде ред. Използвайте LEFT JOIN unnest(...) i ON true за да връща винаги редове от tbl . Вижте:

  • Каква е разликата между LATERAL JOIN и подзаявка в PostgreSQL?

Можете също да използвате regexp_split_to_table() , но това обикновено е по-бавно, защото съвпадението на регулярните изрази струва малко повече. Свързано:

  • SQL избира редове, съдържащи подниз в текстово поле
  • PostgreSQL unnest() с номер на елемент


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

  2. Търсене в пълен текст от PostgreSQL 8.3

  3. cursor.execute(INSERT INTO im_entry.test (+entrym+) СТОЙНОСТИ ('+p+');)

  4. Не може да се свърже с Postgres чрез PHP, но може да се свърже от командния ред и PgAdmin на друга машина

  5. Бавно LEFT JOIN на CTE с интервали от време