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

Как да конкатенираме колони в Postgres SELECT?

С колони от тип низ като character(2) (както споменахте по-късно), показаната конкатенация просто работи, защото цитирайки ръководството:

[...] операторът за конкатенация на низове (|| ) приема въвеждане без низ, стига поне един вход е от тип низ , както е показано в Таблица 9.8. В други случаи вмъкнете изрична принуда към text [...]

Удебелен акцент мой. Вторият пример (select a||', '||b from foo ) работи за всяко типове данни, тъй като невписаният низов литерал ', ' по подразбиране въвежда text прави целия израз валиден във всеки случай.

За типове данни, които не са низови, можете да "поправите" 1-вия израз, като пуснете поне един аргумент към text . (Всяко типът може да бъде прехвърлен към text ):

SELECT a::text || b AS ab FROM foo;

Съдейки по вашия собствен отговор, „не работи „ трябваше да означава „връща NULL ". Резултатът от всичко свързано с NULL е NULL. Ако NULL могат да бъдат включени стойности и резултатът не трябва да е NULL, използвайте concat_ws() за конкатениране на произволен брой стойности (Postgres 9.1 или по-нова версия):

SELECT concat_ws(', ', a, b) AS ab FROM foo;

Разделители се добавят само между ненулеви стойности, т.е. само когато е необходимо.

Или concat() ако не се нуждаете от разделители:

SELECT concat(a, b) AS ab FROM foo;

Тук няма нужда от привеждане на типа, тъй като и двете функции приемат "any" въвеждане и работа с текстови представяния.

Повече подробности (и защо COALESCE е лош заместител) в този свързан отговор:

  • Комбинирайте две колони и добавете в една нова колона

Относно актуализацията в коментар

+ не е валиден оператор за конкатенация на низове в Postgres (или стандартен SQL). Частна идея на Microsoft е да добави това към своите продукти.

Едва ли има основателна причина да използвате character(n) (синоним:char(n) ). Използвайте text или varchar . Подробности:

  • Някакви недостатъци при използването на тип данни „текст“ за съхранение на низове?
  • Най-добрият начин да проверите за „празна или нулева стойност“


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django моделира един външен ключ към много таблици

  2. PostgreSQL 8.4 предоставя DML привилегии за всички таблици на роля

  3. Как да създадете разширение postgres вътре в контейнера?

  4. Производителност на базирано на PostgreSQL приложение:латентност и скрити забавяния

  5. Как да разберем ОБЯСНИТЕЛЕН АНАЛИЗ