sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan sammenkædes kolonner i en Postgres SELECT?

Med strengtypekolonner som character(2) (som du nævnte senere), virker den viste sammenkædning bare fordi, med henvisning til manualen:

[...] strengsammenkædningsoperatoren (|| ) accepterer ikke-stringinput, så længe mindst én input er af en strengtype , som vist i tabel 9.8. I andre tilfælde skal du indsætte en eksplicit tvang til text [...]

Fed understregning min. Det andet eksempel (select a||', '||b from foo ) virker for alle datatyper siden den uindskrevne streng literal ', ' standard til at skrive text gør hele udtrykket gyldigt under alle omstændigheder.

For ikke-strengdatatyper kan du "rette" den første sætning ved at caste mindst ét ​​argument til text . (Enhver type kan castes til text ):

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

At dømme ud fra dit eget svar, "virker ikke " skulle betyde "returnerer NULL ". Resultatet af hvad som helst sammenkædet med NULL er NULL. Hvis NULL værdier kan være involveret, og resultatet skal ikke være NULL, brug concat_ws() for at sammenkæde et vilkårligt antal værdier (Postgres 9.1 eller nyere):

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

Separatorer tilføjes kun mellem ikke-nul-værdier, dvs. kun hvor det er nødvendigt.

Eller concat() hvis du ikke har brug for separatorer:

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

Intet behov for typecasts her, da begge funktioner tager "any" input og arbejde med tekstgengivelser.

Flere detaljer (og hvorfor COALESCE er en dårlig erstatning) i dette relaterede svar:

  • Kombiner to kolonner og tilføj til én ny kolonne

Angående opdatering i kommentaren

+ er ikke en gyldig operator for strengsammenkædning i Postgres (eller standard SQL). Det er en privat idé af Microsoft at tilføje dette til deres produkter.

Der er næppe nogen god grund til at bruge character(n) (synonym:char(n) ). Brug text eller varchar . Detaljer:

  • Er der nogen ulemper ved at bruge datatypen "tekst" til at gemme strenge?
  • Bedste måde at tjekke for "tom eller null værdi"


  1. Hvad er SQL Server Blocking?

  2. MariaDB JSON_KEYS() Forklaret

  3. Konverter nemt dine Microsoft Access-forespørgsler med dette nye værktøj!

  4. Fordele og ulemper ved at bruge lagrede procedurer