Operaciones de cuadro delimitador

Operaciones topológicas

A continuación se presentan los operadores topológicos disponibles para los tipos de conjunto y de rango.

  • ¿Se superponen los valores (tienen valores en común)?

    {set,spans} && {set,spans} → boolean

    SELECT intset '{1, 3}' && intset '{2, 3, 4}';
    -- true
    SELECT floatspan '[1, 3)' && floatspan '[3, 4)';
    -- false
    SELECT floatspanset '{[1, 5),[6, 8)}' && floatspan '[1, 6)';
    -- true
    SELECT tstzspan '[2001-01-01, 2001-01-05)' && tstzspan '[2001-01-02, 2001-01-07)';
    -- true
    
  • ¿Contiene el primer valor el segundo?

    {set,spans} @> {base,set,span} → boolean

    SELECT floatset '{1.5, 2.5}' @> 2.5;
    -- true
    SELECT tstzspan '[2001-01-01, 2001-05-01)' @> timestamptz '2001-02-01';
    -- true
    SELECT floatspanset '{[1, 2),(2, 3)}' @> 2.0;
    -- false
    
  • ¿Está el primer valor contenido en el segundo?

    {base,set,spans} <@ {set,spans} → boolean

    SELECT timestamptz '2001-01-10' <@ tstzspan '[2001-01-01, 2001-05-01)';
    -- true
    SELECT floatspan '[2, 5]' <@ floatspan '[1, 5)';
    -- false
    SELECT floatspanset '{[1,2],[3,4]}' <@ floatspan '[1, 6]';
    -- true
    SELECT tstzspan '[2001-02-01, 2001-03-01)' <@ tstzspan '[2001-01-01, 2001-05-01)';
    -- true
    
  • ¿Es el primer valor adyacente al segundo?

    spans -|- spans → boolean

    SELECT intspan '[2, 6)' -|- intspan '[6, 7)';
    -- true
    SELECT floatspan '[2, 5)' -|- floatspan '(5, 6)';
    -- false
    SELECT floatspanset '{[2, 3],[4, 5)}' -|- floatspan '(5, 6)';
    -- true
    SELECT tstzspan '[2001-01-01, 2001-01-05)' -|- tstzset '{2001-01-05, 2001-01-07}';
    -- true
    SELECT tstzspanset '{[2001-01-01, 2001-01-02]}' -|- tstzspan '[2001-01-02, 2001-01-03)';
    -- false
    

Operaciones de posición

Los operadores de posición disponibles para los tipos de conjunto y de rango se dan a continuación. Observe que los operadores para tipos de tiempo tienen un # adicional para distinguirlos de los operadores para tipos de números.

  • ¿Está el primer valor estrictamente a la izquierda del segundo?

    numbers << numbers → boolean

    times <<# times → boolean

    SELECT intspan '[15, 20)' << 20;
    -- true
    SELECT intspanset '{[15, 17],[18, 20)}' << 20;
    -- true
    SELECT floatspan '[15, 20)' << floatspan '(15, 20)';
    -- false
    SELECT dateset '{2001-01-01, 2001-01-02}' <<# dateset '{2001-01-03, 2001-01-05}';
    -- true
    
  • ¿Está el primer valor estrictamente a la derecha del segundo?

    numbers >> numbers → boolean

    times #>> times → boolean

    SELECT intspan '[15, 20)' >> 10;
    -- true
    SELECT floatspan '[15, 20)' >> floatspan '[5, 10]';
    -- true
    SELECT floatspanset '{[15, 17], [18, 20)}' >> floatspan '[5, 10]';
    -- true
    SELECT tstzspan '[2001-01-04, 2001-01-05)' #>>
      tstzspanset '{[2001-01-01, 2001-01-04), [2001-01-05, 2001-01-06)}';
    -- true
    
  • ¿No está el primer valor a la derecha del segundo?

    numbers &< numbers → boolean

    times &<# times → boolean

    SELECT intspan '[15, 20)' &< 18;
    -- false
    SELECT intspanset '{[15, 16],[17, 18)}' &< 18;
    -- true
    SELECT floatspan '[15, 20)' &< floatspan '[10, 20]';
    -- true
    SELECT dateset '{2001-01-02, 2001-01-05}' &<# dateset '{2001-01-01, 2001-01-04}';
    -- false
    
  • ¿No está el primer valor a la izquierda del segundo?

    numbers &> numbers → boolean

    times #&> times → boolean

    SELECT intspan '[15, 20)' &> 30;
    -- true
    SELECT floatspan '[1, 6]' &> floatspan '(1, 3)';
    -- false
    SELECT floatspanset '{[1, 2],[3, 4]}' &> floatspan '(1, 3)';
    -- false
    SELECT timestamp '2001-01-01' #&> tstzspan '[2001-01-01, 2001-01-05)';
    -- true