sql >> Databasteknik >  >> RDS >> PostgreSQL

Välj kolumner med särskilda kolumnnamn i PostgreSQL

column är ett reserverat ord . Du kan inte använda den som identifierare om du inte dubbelciterar den. Som:"column" .

Men det betyder inte att du borde. Använd bara inte reserverade ord som identifierare. Någonsin.

Till ...

välj en lista med kolumner med 2010 i namnet:

.. du kan använda den här funktionen för att bygga SQL-kommandot dynamiskt från systemkatalogtabellen 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;

Ring:

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

Returnerar något i stil med:

SELECT foo2010, bar2010_id, FROM weather_data;

Du kan inte göra detta helt dynamiskt eftersom returtypen är okänd tills vi faktiskt bygger frågan.



  1. Lägga till en frågetips när du anropar tabellvärderad funktion

  2. Hur anropar man en MySQL-lagrad procedur från PHP-kod?

  3. SQL Server Management Studio-alternativ för att bläddra/redigera tabeller och köra frågor

  4. LINQ för Java-verktyg