Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 05 January 2011 16:11

aurel3
Juste Inscrit !
Date d'inscription: 5 Jan 2011
Messages: 1

créer 2 nouvelles colonnes à partir d'une sous POSTGRES

Bonjour,

je travaille sous une base de donnée Postgres, je souhaite créer deux nouvelles colonnes à partir d'une colonne déjà existante dans ma table.
Ma colonne initiale est comme suit:
203.526542
203.526745
209.36541
272.001234

et je veux obtenir une première colonne avec que les entier càd:
203
203
209
272

j'ai réussi cette partie là en faisant
                                                     UPDATE matable SET nom_colomn_creé = trunc(nom_colomn_complete)

mais maintenant je veux une colonne qu'avec les décimaux càd:
526542
526745
36541
001234

Existe t'il une fonction pour extraire que la partie décimale sous Postgres???

Hors ligne

 

#2 Wed 05 January 2011 17:47

Antoine LOTZ
Juste Inscrit !
Date d'inscription: 14 Aug 2009
Messages: 7

Re: créer 2 nouvelles colonnes à partir d'une sous POSTGRES

Il doit y avoir plus propre mais ceci doit marcher :

Code:

UPDATE matable SET nom_colonne_decimale = substring((nom_colomn_complete-trunc(nom_colomn_complete))::text  from 3)::integer
WHERE (nom_colomn_complete-trunc(nom_colomn_complete))>0

Hors ligne

 

#3 Wed 05 January 2011 17:59

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: créer 2 nouvelles colonnes à partir d'une sous POSTGRES

Bonjour,

marrant, êtes vous étudiant ? http://georezo.net/forum/viewtopic.php? … 72#p182972

@Antoine : et si une valeur 2000.1231456 apparait ?

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#4 Thu 06 January 2011 09:40

Antoine LOTZ
Juste Inscrit !
Date d'inscription: 14 Aug 2009
Messages: 7

Re: créer 2 nouvelles colonnes à partir d'une sous POSTGRES

Code:

SELECT SUBSTRING((2000.1231456 -trunc(2000.1231456 ))::text  from 3)::integer

Ca me renvoi bien 1231456, après, j'ai mis ::integer mais cela dépends du format de son champs cible....numeric marche aussi et est plus précis...

Hors ligne

 

#5 Thu 06 January 2011 11:59

brunofriedmann
Participant occasionnel
Lieu: Vellerat, suisse
Date d'inscription: 19 Apr 2008
Messages: 31
Site web

Re: créer 2 nouvelles colonnes à partir d'une sous POSTGRES

http://www.postgresql.org/docs/8.3/stat … tting.html

Avec les patterns match ?

select 272.001234::integer, substring(272.001234::varchar from '%#".(_)*#"%' for '#')

Hors ligne

 

#6 Thu 06 January 2011 13:17

Sylvain_M
Membre
Lieu: Lyon
Date d'inscription: 3 Aug 2009
Messages: 298

Re: créer 2 nouvelles colonnes à partir d'une sous POSTGRES

je conseillerais plutôt d'utiliser les fonctions qui ont été prévues pour ça dans postgresql: http://docs.postgresqlfr.org/8.4/functions-math.html

pour obtenir la partie entière il y a la fonction trunc()
pour la partie décimale, il n'y a pas de fonction spécifique, mais une soustraction ou un modulo entre la colonne initiale et la partie entière devraient faire l'affaire (en terme de vitesse d'exécution je n'ai pas constaté de différence significatives)

SELECT colonne,trunc(colonne) AS entier, colonne % trunc(colonne) AS decimales
ou
SELECT colonne,trunc(colonne) AS entier, substring((colonne - trunc(colonne))::text  from 3) AS decimales
si en plus on veut supprimer le "0." devant la partie décimale

Hors ligne

 

Pied de page des forums

Powered by FluxBB