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

Jak zřetězit sloupce v Postgres SELECT?

Se sloupci typu řetězce jako character(2) (jak jste uvedl později), zobrazené zřetězení prostě funguje, protože, cituji manuál:

[...] operátor zřetězení řetězců (|| ) přijímá neřetězcový vstup, pokud alespoň jeden vstup je řetězcového typu , jak je uvedeno v tabulce 9.8. V ostatních případech vložte do text explicitní donucení [...]

Odvážný důraz můj. 2. příklad (select a||', '||b from foo ) funguje pro jakékoli datové typy od netypového řetězcového literálu ', ' výchozí typ text takže celý výraz bude v každém případě platný.

U neřetězcových datových typů můžete „opravit“ 1. příkaz přetypováním alespoň jednoho argumentu do text . (Jakékoli typ lze přetypovat na text ):

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

Soudě podle vaší vlastní odpovědi:„nefunguje " měl znamenat "vrací NULL ". Výsledek cokoli." zřetězený na NULL je NULL. Pokud NULL hodnoty mohou být zahrnuty a výsledek nesmí být NULL, použijte concat_ws() ke zřetězení libovolného počtu hodnot (Postgres 9.1 nebo novější):

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

Oddělovače se přidávají pouze mezi nenulové hodnoty, tj. pouze tam, kde je to nutné.

Nebo concat() pokud nepotřebujete oddělovače:

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

Zde není potřeba přetypování, protože obě funkce berou "any" vkládání a práce s textovými reprezentacemi.

Další podrobnosti (a proč COALESCE je špatná náhrada) v této související odpovědi:

  • Zkombinujte dva sloupce a přidejte je do jednoho nového sloupce

O aktualizaci v komentáři

+ není platný operátor pro zřetězení řetězců v Postgres (nebo standardní SQL). Je to soukromý nápad společnosti Microsoft přidat toto do svých produktů.

Pro použití character(n) neexistuje žádný dobrý důvod (synonymum:char(n) ). Použijte text nebo varchar . Podrobnosti:

  • Nějaké nevýhody používání datového typu "text" pro ukládání řetězců?
  • Nejlepší způsob, jak zkontrolovat „prázdnou nebo nulovou hodnotu“


  1. Jak uživateli udělit oprávnění ke vzdálenému přístupu k serveru mysql?

  2. Praktické použití funkce SQL COALESCE

  3. Proces upgradu krok za krokem na R12.2 Upgrade část -3

  4. 12c Přesun datových souborů online