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 20/03/2018 14:35:16

bruman
Membre

Command COPY TO CSV

Bonjour à tous,

Nouveau sur ce forum, j'aurai besoin de vos lumières.

J'ai créer un batch pour faire un export CSV de PostgreSQL.

COPY (SELECT lpad(cast(code_barre as varchar(13)), 13, '0') as "Product_id", b.reference as "Reference", b.libelle as "Libelle", (b.qte_reelle-qte_en_reserve) as "Quantity", b.prix_vente as "Price", b.prix_vente as "Price2" from article b where suppr='N' and b.code_barre is not null and b.pvpromo is not null and  b.qte_reelle-qte_en_reserve>0 and prix_vente>0 and libelle !='CHEQUE CADEAU' and pvpromo>0 order by "Quantity") TO 'C:/BRUMAN/ExtractArt_datejour.csv' DELIMITER ';' CSV;

Plusieurs soucis :
- le résultat de mon CSV contient plusieurs tabulations dans les champs
- mon CSV ne contient pas de ; en fin de chaque ligne
- dans le champ "Libelle", j'ai des retours charriots; donc mon CSV se décale de ligne dès qu'il en rencontre

Merci pour votre aide.
Bruce

Hors ligne

#2 20/03/2018 18:23:31

gleu
Administrateur

Re : Command COPY TO CSV

Si le fichier CSV contient des tabulations ou des retours chariots, c'est qu'ils font partie des champs texte. Dans ce cas, le contenu du champ est englobé avec des guillemets doubles. Si jamais cela gêne l'outil qui lit le fichier CSV, il faut que vous les remplaciez par un caractère qui ne dérangera pas votre outil. Enfin, le CSV ne contient pas de point virgule en fin de ligne parce c'est le symbole de délimitation entre deux champs, pas de fin de ligne.


Guillaume.

Hors ligne

#3 20/03/2018 18:34:53

bruman
Membre

Re : Command COPY TO CSV

Bonjour et merci pour votre réponse.
Pour les tabulations, il faut donc que je créé un batch pour les supprimer.
Pour le point virgule en fin de ligne, il n'existe pas une astuce/commande pour l'implémenter?
Merci.
Bruce

Hors ligne

#4 20/03/2018 19:04:57

gleu
Administrateur

Re : Command COPY TO CSV

Pour les tabulations, il est tout à fait possible que la requête SELECT les supprime en faisant appel à une fonction sur le champ qui les contient. Pour le point-virgule, non.


Guillaume.

Hors ligne

#5 20/03/2018 19:11:13

bruman
Membre

Re : Command COPY TO CSV

Avec la fonction trim par exemple ?

Hors ligne

#6 20/03/2018 23:03:08

gleu
Administrateur

Re : Command COPY TO CSV

Non. trim ne remplace que ce qui se trouve au début et/ou à la fin d'une chaîne, pas au milieu. Je pensais plutôt à replace ou regexp_replace.


Guillaume.

Hors ligne

#7 21/03/2018 18:49:52

bruman
Membre

Re : Command COPY TO CSV

Bonjour,
La fonction TRIM a fait le boulot.
Les tabulations étaient bien en fin de chaîne.
Ma requête fait bien le boulot smile
Merci pur ton aide.
Bruce

Hors ligne

Pied de page des forums