
La FAQ de PostgreSQLConsultez toutes les FAQ
Nombre d'auteurs : 7, nombre de questions : 51, dernière mise à jour : 8 juillet 2009
Sommaire→Syntaxe SQL et structure de données→Exemples d'utilisationsDans la table matable, on doit mettre un numéro de téléphone. Le champ en question : numerotel CHAR(10) On souhaite que chaque lettre doit être comprise en '0' et '9' et que le numéro fait exactement 10 chiffres. On peu géré ce champ grâce aux expressions régulières et la contrainte de valeur :
ALTER TABLE matable
ADD CONSTRAINT numerotel_check CHECK (numerotel ~ '^[0-9]{10,}$'::text);
Petite explication :
^ : pour le indiquer debut de la chaine
[0-9] : Une plage de caractères de 0 à 9
{10,} : au moins 10 caracteres // {10} (sans la virgule) exactement 10 caracteres
$ : 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 champs d'un table avec ces nombres aleatoires entre 1 et 6 inclus pour le champ 1 et entre 1 et 4 inclus pour le champ 2.
mais il faut qu'il y ait au maximum dans la table 4 fois le meme nombre pour le champ 1 et 6 fois le meme nombre pour le champ 2
(ce qui limite le nombre de combinaisons a 24, mais c'est justement ce qu'il me faut)
je ne vois pas du tout comment m'y prendre en plsql, est ce que quelqu'un pourrait me lancer sur une piste ?
merci
Une solution :
J'ai pris le probleme differement, je cree un 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'inserre dans ma table finale
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 insere dans ta table finale
-- raise notice '%',latable.mavaleur;
END LOOP;
COMMIT;
return 0;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE ;



