sql >> Database >  >> RDS >> PostgreSQL

Selecteer kolommen met bepaalde kolomnamen in PostgreSQL

column is een gereserveerd woord . U kunt het niet als identificatie gebruiken, tenzij u het dubbel aanhaalt. Vind ik leuk:"column" .

Betekent echter niet dat je dat moet doen. Gebruik alleen geen gereserveerde woorden als identifiers. Ooit.

Om ...

selecteer een lijst met kolommen met 2010 in hun naam:

.. u kunt deze functie gebruiken om de SQL-opdracht dynamisch te bouwen vanuit de systeemcatalogustabel pg_attribute :

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;

Bel:

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

Retourneert zoiets als:

SELECT foo2010, bar2010_id, FROM weather_data;

Je kunt dit niet volledig dynamisch maken, omdat het retourtype onbekend is totdat we de query daadwerkelijk hebben gemaakt.



  1. Arabisch opslaan in SQL-database

  2. SQL Server - NULL opnemen met UNPIVOT

  3. formaat interval met to_char

  4. SqlTransaction gebruiken in C#