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
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