Vous n'êtes pas identifié(e).
Pages : 1
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
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
Julien.
https://rjuju.github.io/
Hors ligne
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
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 | | |
Julien.
https://rjuju.github.io/
Hors ligne
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
Pages : 1