PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wählen Sie Spalten mit bestimmten Spaltennamen in PostgreSQL aus

column ist ein reserviertes Wort . Sie können es nicht als Bezeichner verwenden, es sei denn, Sie setzen es in doppelte Anführungszeichen. Wie:"column" .

Das heißt aber nicht, dass Sie das tun sollten. Verwenden Sie nur keine reservierten Wörter als Bezeichner. Immer.

An ...

Wählen Sie eine Liste von Spalten mit 2010 im Namen aus:

.. Sie können diese Funktion verwenden, um den SQL-Befehl dynamisch aus der Systemkatalogtabelle pg_attribute zu erstellen :

CREATE OR REPLACE FUNCTION f_build_select(_tbl regclass, _pattern text)
  RETURNS text AS
$func$
    SELECT format('SELECT %s FROM %s'
                 , string_agg(quote_ident(attname), ', ')
                 , $1)
    FROM   pg_attribute 
    WHERE  attrelid = $1
    AND    attname LIKE ('%' || $2 || '%')
    AND    NOT attisdropped  -- no dropped (dead) columns
    AND    attnum > 0;       -- no system columns
$func$ LANGUAGE sql;

Aufruf:

SELECT f_build_select('weather_data', '2010');

Gibt etwas zurück wie:

SELECT foo2010, bar2010_id, FROM weather_data;

Sie können dies nicht vollständig dynamisch machen, da der Rückgabetyp unbekannt ist bis wir die Abfrage tatsächlich erstellen.