OVH Cloud OVH Cloud

fonction Interval() normée ou non ?

1 réponse
Avatar
Antoun
Bonjour à tous,

MySQL dispose d'une fonction Interval (rien à voir avec des expressions
de dates), qui permet de placer une valeur par rapport à une série de
bornes. Par exemple, on définit quatre classes d'âges bornées par 8, 18,
25 et 65 ans, une personne de 33 ans est dans la classe 3 :

Interval(33, 0, 18, 25, 65)

Cette fonction fait-elle partie du standard SQL, ou est-ce une extension ?

Merci d'avance !

Antoun

1 réponse

Avatar
Antoun
merci Fred !

Tu sais s'il y a des SGBD qui ont implémenté WIDTH_BUCKET ?


Fred Brouard - SQLpro wrote:
Non, cecei n'est pas standard.
En revanche la fonction standard pour ce faire est WIDTH_BUCKET...
(extrait de mon livre SQL - collection Synthex, co écrit avec C Soutou) :

WIDTH_BUCKET (e, m, M, p)
permet de définir une distribution des valeurs de l'expression e
entre m et M avec un écart p.

Exemple :
A partir des données de la table T_CLIENT_CLI suivante :
CLI_ID CLI_NOM CLI_LIMITE_CREDIT
----------- ------------- -----------------
853 Palin 400
825 Dreyfuss 500
826 Barkin 500
827 Siegel 500
844 Julius 700
843 Oates 700
836 Berenger 1200
837 Stanton 1200
835 Eastwood 1200
840 Elliott 1400
841 Boyer 1400
842 Stern 1400
848 Olmos 1800
849 Kaurusmdki 1800
828 Minnelli 2300
852 Tanner 2300
851 Brown 2300
850 Finney 2300
829 Hunter 2300
830 Dutt 3500
831 Bel Geddes 3500
839 Johnson 3500
832 Spacek 3500
833 Moranis 3500
838 Nicholson 3500
834 Idle 3500
845 Fawcett 5000
847 Streep 5000
846 Brando 5000

On veut répartir les employés suivant la colonne CLI_LIMITE_CREDIT
La requête suivante définit 10 plages de valeur (GROUPE_CREDIT) entre
les chiffres 600 et 4000 (soit 10 plages de 340 unités)
La première ira de 600 à 940 (non inclus), la seconde de 940 à 1280 (non
inclus), etc.
Si le chiffre est inférieur à la borne minimale, la plage est valuée à
zéro, s'il est supérieur
à la borne maximale, la plage est automatiquement calculée.

SELECT CLI_ID, CLI_NOM, CLI_LIMITE_CREDIT,
WIDTH_BUCKET(CLI_LIMITE_CREDIT, 600, 4000, 10) AS GROUPE_CREDIT
FROM T_CLIENT_CLI
ORDER BY CLI_LIMITE_CREDIT,GROUPE_CREDIT

CLI_ID CLI_NOM CLI_LIMITE_CREDIT GROUPE_CREDIT
----------- -------------- ----------------- -------------
853 Palin 400 0
825 Dreyfuss 500 0
826 Barkin 500 0
827 Siegel 500 0
844 Julius 700 1
843 Oates 700 1
836 Berenger 1200 2
837 Stanton 1200 2
835 Eastwood 1200 2
840 Elliott 1400 3
841 Boyer 1400 3
842 Stern 1400 3
848 Olmos 1800 4
849 Kaurusmdki 1800 4
828 Minnelli 2300 6
852 Tanner 2300 6
851 Brown 2300 6
850 Finney 2300 6
829 Hunter 2300 6
830 Dutt 3500 9
831 Bel Geddes 3500 9
839 Johnson 3500 9
832 Spacek 3500 9
833 Moranis 3500 9
838 Nicholson 3500 9
834 Idle 3500 9
845 Fawcett 5000 11
847 Streep 5000 11
846 Brando 5000 11

A +

Antoun a écrit:

Bonjour à tous,

MySQL dispose d'une fonction Interval (rien à voir avec des
expressions de dates), qui permet de placer une valeur par rapport à
une série de bornes. Par exemple, on définit quatre classes d'âges
bornées par 8, 18, 25 et 65 ans, une personne de 33 ans est dans la
classe 3 :

Interval(33, 0, 18, 25, 65)

Cette fonction fait-elle partie du standard SQL, ou est-ce une
extension ?

Merci d'avance !

Antoun