sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur utför man en urvalsfråga i ett DO-block?

DO kommando kontra PL/pgSQL-funktion

DO kommandot returnerar inte rader. Du kan skicka NOTICES eller RAISE andra meddelanden (med språk plpgsql) eller så kan du skriva till en (tillfällig) tabell och senare SELECT från det för att komma runt detta.

Men egentligen, skapa en (plpgsql) funktion istället, där du kan definiera en returtyp med RETURNS sats eller OUT / INOUT parametrar och retur från funktionen på olika sätt.

Om du inte vill ha en funktion sparad och synlig för andra anslutningar, överväg en "tillfällig" funktion, som är en odokumenterad men väletablerad funktion:

  • Hur skapar man en tillfällig funktion i PostgreSQL?

generate_series() för problem till hands

För det aktuella problemet verkar du inte behöva några av detta. Använd den här enkla frågan istället:

SELECT row_number() OVER ()    AS running_month
     , extract('year'  FROM m) AS year
     , extract('month' FROM m) AS month
FROM   generate_series(timestamp '2012-04-01'
                     , timestamp '2016-01-01'
                     , interval '1 month') m;

db<>spela här

Varför?

  • Genererar tidsserier mellan två datum i PostgreSQL


  1. Lista över territorier som stöds av Oracle Database

  2. Hur kan jag manipulera MySQL fulltext sökrelevans för att göra ett fält mer "värdefullt" än ett annat?

  3. SQL:ta bort all data från alla tillgängliga tabeller

  4. MySQL CONVERT_TZ()