FAQ PostgreSQLConsultez toutes les FAQ
Nombre d'auteurs : 5, nombre de questions : 51, dernière mise à jour : 9 septembre 2005 Ajouter une question
Cette FAQ a été réalisée à partir des contributions des membres du forum PostgreSQL de www.developpez.com.
Si vous désirez contribuer à l'amélioration de cette FAQ, veuillez contacter le responsable.
Commentez
Dans la table matable, on doit mettre un numéro de téléphone. La colonne en question : numerotel CHAR(10). On souhaite que chaque lettre soit comprise entre '0' et '9' et que le numéro fasse exactement 10 chiffres. On peut gérer cette colonne grâce aux expressions régulières et une contrainte de valeur :
Code sql : | Sélectionner tout |
1 2 3 | ALTER TABLE matable ADD CONSTRAINT numerotel_check CHECK (numerotel ~ '^[0-9]{10,}$'::text); |
^ : pour le indiquer début de la chaine
[0-9] : Une plage de caractères de 0 à 9
{10,} : au moins 10 caractères // {10} (sans la virgule) exactement 10 caractères
$ : pour indiquer la fin
pour plus d'info : www.google.fr
mots clefs :
-expressions régulières
-regex
Question posé sur le forum :
Je dois remplir 2 colonnes d'une table avec ces nombres aléatoires entre 1 et 6 inclus pour la colonne 1 et entre 1 et 4 inclus pour la colonne 2.
Mais il faut qu'il y ait au maximum dans la table 4 fois le même nombre pour la colonne 1 et 6 fois le même nombre pour la colonne 2
(ce qui limite le nombre de combinaisons à 24, mais c'est justement ce qu'il me faut).
Je ne vois pas du tout comment m'y prendre en PL/SQL. Est-ce que quelqu'un pourrait me lancer sur une piste ?
Merci
Une solution :
J'ai pris le problème différemment, je crée une table temporaire qui contient toutes mes valeurs possibles :
1,1,1,1,2,2,2,2,3...........6,6,6,6
et je fais un order by random dessus. Je parcours ma table et j'insère dans ma table finale.
Code sql : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | CREATE OR REPLACE FUNCTION "public"."testrandom" () RETURNS integer AS $body$ declare i int2; j int2; latable RECORD; begin CREATE TEMPORARY TABLE listevaleurs (mavaleur int2) ON COMMIT DROP; FOR j IN 1..6 LOOP FOR i IN 1..4 LOOP INSERT INTO listevaleurs VALUES (j); END LOOP; END LOOP; FOR latable IN SELECT mavaleur FROM listevaleurs ORDER BY random() LOOP -- ici tu insères dans ta table finale -- raise notice '%',latable.mavaleur; END LOOP; COMMIT; return 0; end; $body$ LANGUAGE 'plpgsql' VOLATILE ; |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.