PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 04/06/2020 13:14:54

oliv38
Membre

Intervalle de valeurs

Bonjour,
j souhaite créer une table de référence avec des intervalles de valeurs numériques. J'avais commencé à faire 2 champs "bornes_inferieures" et "bornes_superieures" et un 3è champs pour stocker les indicateurs correspondants à chaque intervalle. J'ai deux questions à ce sujet :

- j'ai vu l'existence du type NUMRANGE mais je ne parviens pas trop à savoir comment m'en servir dans mon cas, ni la syntaxe que doit avoir mes intervalles stockés ;
- en joignant 2 tables, une de résultat et celle de mes intervalles, je souhaite créer une requête SQL qui me retourne l'indicateur en fonction de l'intervalle dans lequel se trouve mon résultat.

Pourriez-vous m'aiguiller pour choisir la meilleure solution entre 2 champs NUMERIC créant mon intervalle ou un seul champ NUMRANGE? ainsi que me dire si le calcul de comparaison de ma requête SQL peut-être aussi simplement positionner dans un WHERE ?

Merci d'avance.

Hors ligne

#2 04/06/2020 14:17:10

rjuju
Administrateur

Re : Intervalle de valeurs

Je choisirais personellement le type numrange, vu que cela permet également de spécifier sur les bornes doivent être inclues ou exclues.  Cela permet également d'éviter de devoir explicitement tout typer en numrange dans les requêtes et/ou les contraintes.


Les comparaisons s'effectuent généralement très facilement avec les opérateurs fournis, voir https://www.postgresql.org/docs/current … TORS-TABLE

Hors ligne

#3 04/06/2020 14:52:17

oliv38
Membre

Re : Intervalle de valeurs

Bonjour et merci pour votre réponse.
Comment définir un champ en NUMRANGE : j'ai testé ALTER TABLE nom_table ALTER COLUMN nom_colonne type NUMRANGE mais pgsql m'indique d'utiliser USING ::numrange, je ne comprend pas trop.
Enfin qu'elle est la syntaxe de la donnée à saisir dans mon champ d'intervalle, j'ai testé comme ceci par exemple '[8.5,100)' pour un intervalle entre 8,5 et 1000 qui inclut 8,5 et exclut 100.

Merci encore pour votre aide.

Hors ligne

#4 04/06/2020 16:37:28

rjuju
Administrateur

Re : Intervalle de valeurs

USING permet de spécifier une expression pour passer d'un type à un autre quand cela n'est pas possible automatiquement, ce qui est bien évidemment le cas pour passer d'un numeric à un numrange.  Par exemple :

# create table numrange(deb numeric, fin numeric);
CREATE TABLE

# insert into numrange select 1, 2;
INSERT 0 1

# alter table numrange alter column deb type numrange using numrange(deb, fin, '[)');
ALTER TABLE

# alter table numrange drop column fin;
ALTER TABLE

# alter table numrange rename column deb  to range;
ALTER TABLE

# table numrange ;
 range 
-------
 [1,2)
(1 row)

# \d numrange 
              Table "public.numrange"
 Column |   Type   | Collation | Nullable | Default 
--------+----------+-----------+----------+---------
 range  | numrange |           |          | 

Hors ligne

#5 05/06/2020 09:29:11

oliv38
Membre

Re : Intervalle de valeurs

Merci pour vos réponses et ces explications, j'ai réussi à créer ma table et mes valeurs d'intervalle.
Bonne journée

Hors ligne

Pied de page des forums