À propos du tableau de gammes (par exemple int4range[]
) et range functions.Élégant moyen de vérifier l'élément dans un tableau de gammes
Table Suppose t
comme
CREATE TABLE t (id serial, r int4range[]);
INSERT INTO t (r) VALUES
('{"[2,5]","[100,200]"}'::int4range[]),
('{"[6,9]","[201,300]"}'::int4range[]);
Donc, pour vérifier si ou sont là, ont besoin d'une requête comme
SELECT * FROM (SELECT *, unnest(r) as ur FROM t) t2 WHERE 7<@ur; -- row2
SELECT * FROM (SELECT *, unnest(r) as ur FROM t) t2 WHERE 70<@ur; -- empty
Il y a une façon de faire moins laid ce genre de requêtes?
REMARQUE: besoin d'un « modèle » générique pour créer des fonctions qui renvoie la table requête simple *
,
CREATE FUNCTION t_where(int4) RETURNS t AS $f$
SELECT id,r -- but need *
FROM (SELECT *, unnest(r) as ur FROM t) t2
WHERE $1 <@ ur
$f$ LANGUAGE SQL IMMUTABLE;
Ainsi, la même requête est SELECT * FROM t_where(7)
,
mais j'ai besoin (d'une manière élégante) pour construire en utilisant *
, ne pas énumérer les champs (id,r
).
'select * t ...'? –
Salut @a_horse_with_no_name oui, 't. *', Mais il n'y a pas de 't' dans le contexte non-testé. –