Bonjour,
Je souhaiterai savoir si il existe une fonction permettant la conversion d'une donnée numérique vers numérique avec décimal, par exemple 00057888 en 578.88 ?
Merci
Bonjour,
Je souhaiterai savoir si il existe une fonction permettant la conversion d'une donnée numérique vers numérique avec décimal, par exemple 00057888 en 578.88 ?
Merci
J'ai trouvé la solution suivante :
Y a t-il mieux que cela ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT (1.0*57888/100)::NUMERIC(8,2)
D'ailleurs, petite bizarrerie :
Ceci :
Mais ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT (1.0*00017073/100)::NUMERIC(8,2) ==> Retourne 170.73
Cela est-il normal ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 CREATE OR REPLACE FUNCTION import.REFORMATE_PRIX(p_prix INTEGER) RETURNS NUMERIC(8,2) AS $$ BEGIN IF p_prix > 0 THEN RETURN (1.0*p_prix/100)::NUMERIC(8,2); ELSE RETURN 0; END IF; END; $$ LANGUAGE plpgsql; SELECT import.REFORMATE_PRIX(00017073); ==> Retourne 171
Votre donnée n'est pas numérique. C'est de la chaine de caractères... SI votre données était réellement numérique vous n'auriez pas de zéro en tête !
Un simple CAST suffit :
A +
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT CAST('00057888' AS DECIMAL(16,2)) / 100.0
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Ma donnée est numérique, le paramètre en entrée pour la fonction REFORMATE_PRIX() est pourtant de type INTEGER !
J'ai modifié le code selon votre exemple, le résultat reste le même.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 CREATE OR REPLACE FUNCTION import.REFORMATE_PRIX(p_prix INTEGER) RETURNS NUMERIC(8,2) AS $$ BEGIN RETURN CAST(p_prix AS DECIMAL(8,2)) / 100.0; END; $$ LANGUAGE plpgsql;Retourne toujours 171
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT import.REFORMATE_PRIX(17073);
bonjour , j'ai testé ta fonction et j'ai bien comme résultat 170.73
est ce que par hasard tu ne testes pas ta fonction pour insérer ou mettre à jour un champs integer? dans ce cas là la valeur serait casté en integer
Je n'en suis pas encore là mais le but est bien de mettre à jour un champ qui lui sera de type NUMERIC(8,2)
Sinon, je viens de trouver pourquoi ça ne m'affichai pas le bon résultat. J'utilise phpstorm pour bosser, et ce soft permet l'accès à une console SQL.
Je viens de tester directement sur la console sur le serveur sur linux et la en effet ça fonctionne comme il faut.
Donc c'est la faute du soft, doit y avoir un truc à paramétrer au niveau affichage des résultats.
Merci quand même pour vos réponses :-)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager