sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur sammanfogar man kolumner i en Postgres SELECT?

Med kolumner av strängtyp som character(2) (som du nämnde senare), den visade sammanlänkningen fungerar bara eftersom, med hänvisning till manualen:

[...] strängsammansättningsoperatorn (|| ) accepterar icke-stränginmatning, så länge som minst en ingång är av en strängtyp , som visas i Tabell 9.8. För andra fall, infoga ett uttryckligt tvång till text [...]

Djärv betoning min. Det andra exemplet (select a||', '||b from foo ) fungerar för alla datatyper sedan den oskrivna strängen literal ', ' standardtyp text vilket gör hela uttrycket giltigt i alla fall.

För icke-strängdatatyper kan du "fixa" den första satsen genom att casta minst ett argument till text . (Alla typ kan casta till text ):

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

Att döma av ditt eget svar, "fungerar inte " skulle betyda "returnerar NULL ". Resultatet av vad som helst sammanlänkade med NULL är NULL. Om NULL värden kan vara involverade och resultatet ska inte vara NULL, använd concat_ws() för att sammanfoga valfritt antal värden (Postgres 9.1 eller senare):

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

Separatorer läggs endast till mellan icke-nullvärden, dvs endast där det är nödvändigt.

Eller concat() om du inte behöver separatorer:

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

Inget behov av typcasts här eftersom båda funktionerna tar "any" mata in och arbeta med textrepresentationer.

Mer information (och varför COALESCE är ett dåligt substitut) i detta relaterade svar:

  • Kombinera två kolumner och lägg till i en ny kolumn

Angående uppdatering i kommentaren

+ är inte en giltig operator för strängsammansättning i Postgres (eller standard SQL). Det är en privat idé av Microsoft att lägga till detta i sina produkter.

Det finns knappast någon bra anledning att använda character(n) (synonym:char(n) ). Använd text eller varchar . Detaljer:

  • Några nackdelar med att använda datatypen "text" för att lagra strängar?
  • Bästa sättet att söka efter "tomt eller nullvärde"


  1. Återställ databas från nödläge i SQL Server

  2. Hur man får en lista över kolumner med unika begränsningar i SQL Server Database - SQL Server / TSQL Tutorial Del 98

  3. Hur man jämför två kolumner i MySQL

  4. Laravel:Angiven nyckel var för lång; max nyckellängd är 767 byte