sql >> Databasteknik >  >> RDS >> PostgreSQL

Itererar över heltal[] i PL/pgSQL

DO
$do$
DECLARE
   a integer[] := array[1,2,3];
   i integer;                      -- int, not bigint
BEGIN
   FOR i IN 1 .. array_upper(a, 1)
   LOOP
      RAISE NOTICE '%', a[i];      -- single quotes
   END LOOP;
END
$do$;

Eller enklare med FOREACH i PostgreSQL 9.1 eller senare:

   FOREACH i IN ARRAY a
   LOOP 
      RAISE NOTICE '%', i;
   END LOOP;

För flerdimensionella arrayer se:

  • Slinga över arraydimension i plpgsql

Men uppsättningsbaserade lösningar med generate_series() eller unnest() är ofta snabbare än att loopa över stora set. Grundläggande exempel:

  • PostgreSQL:Expansion av frekvenstabell
  • Välj varje månad mellan ett start- och slutdatum

Sök i tagggenereringsserien eller unnest för mer.




  1. Fråga med LEFT JOIN returnerar inte rader för antalet 0

  2. Hämta en kolumns namn från dess ID i SQL Server:COL_NAME()

  3. Lär dig MySQL – New Technology Week

  4. Hämta föregående och nästa rad från rader valda med (WHERE) villkor