PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak połączyć kolumny w Postgres SELECT?

Z kolumnami typu string, takimi jak character(2) (jak wspomniałeś później), wyświetlana konkatenacja działa tylko dlatego, że cytując instrukcję:

[...] operator konkatenacji ciągów (|| ) akceptuje dane inne niż ciąg, o ile co najmniej jedno wejście jest typu ciąg , jak pokazano w tabeli 9.8. W innych przypadkach wstaw wyraźny przymus do text [...]

Moje odważne podkreślenie. Drugi przykład (select a||', '||b from foo ) działa dla dowolnego typy danych, ponieważ nieopisany literał ciągu ', ' domyślnie wpisz text czyniąc całe wyrażenie ważnym w każdym przypadku.

W przypadku typów danych innych niż łańcuchowe możesz „naprawić” pierwszą instrukcję, rzutując co najmniej jeden argument na text . (Dowolny typ można rzutować na text ):

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

Sądząc po Twojej odpowiedzi, „nie działa „ miało oznaczać „zwraca NULL „. Wynik cokolwiek w połączeniu z NULL ma wartość NULL. Jeśli NULL wartości mogą być zaangażowane, a wynik nie może być NULL, użyj concat_ws() do łączenia dowolnej liczby wartości (Postgres 9.1 lub nowszy):

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

Separatory są dodawane tylko między wartościami innymi niż null, tj. tylko tam, gdzie jest to konieczne.

Lub concat() jeśli nie potrzebujesz separatorów:

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

Nie ma potrzeby rzutowania typów tutaj, ponieważ obie funkcje przyjmują "any" wprowadzanie i praca z reprezentacjami tekstowymi.

Więcej szczegółów (i dlaczego COALESCE jest kiepskim substytutem) w tej powiązanej odpowiedzi:

  • Połącz dwie kolumny i dodaj do jednej nowej kolumny

Jeśli chodzi o aktualizację w komentarzu

+ nie jest prawidłowym operatorem konkatenacji ciągów w Postgresie (lub standardowym SQL). To prywatny pomysł firmy Microsoft, aby dodać to do swoich produktów.

Nie ma prawie żadnego dobrego powodu, aby używać character(n) (synonim:char(n) ). Użyj text lub varchar . Szczegóły:

  • Jakieś wady używania typu danych „tekst” do przechowywania ciągów?
  • Najlepszy sposób na sprawdzenie „pustej lub pustej wartości”


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gniazda domeny PostgreSQL UNIX a gniazda TCP

  2. Znajdź obiekty zależne dla tabeli lub widoku

  3. pgmemcache a nieskończona pamięć podręczna

  4. Sprawdź, czy sekwencja istnieje w Postgresie (plpgsql)

  5. Jak zmienić bazę danych na postgresql za pomocą Symfony 2.0?