Partage
  • Partager sur Facebook
  • Partager sur Twitter

convertir un varchar en decimal <1

Sujet résolu
    4 juillet 2019 à 14:20:22

    Bonjour à tous.

    J'aimerais utilisé dans mon php la requête du cast pour permettre d'avoir un varchar en decimal mais en chiffre plus petit que 1.

    J'ai mon nombre qui est de 39 Mo  qui est le stockage. Et j'aimerais qu'il ressemble à 0.039 Go.

    Je n'arrive pas à trouver la commande .

    Merci d'avance :)


    • Partager sur Facebook
    • Partager sur Twitter
      4 juillet 2019 à 14:54:38

      Je suis pas sûr d'avoir bien compris. A ta place je récupère les 39Mo et dans mon traitement php je le divise par 1000 pour être en Go
      • Partager sur Facebook
      • Partager sur Twitter
        4 juillet 2019 à 15:08:56

        Merci de ta réponse Maxime,

        ba enfaite c'est dans un tableau,

        J'ai une colonne capacité Total Mo et capacité libre Mo que je veux transformer en Go.

        J'ai pensé le faire directement dans la requête sql comme j'affiche tous ce qu'il y a dans la table d'un coup.

        • Partager sur Facebook
        • Partager sur Twitter
          4 juillet 2019 à 15:23:11

          Tu peux faire une division soit dans ta clause SELECT, soit en PHP. Tu divises par 1000 pour convertir les Mo en Go, ou 1024 pour convertir les Mio en Gio.

          Quelle est la difficulté ?

          • Partager sur Facebook
          • Partager sur Twitter
            4 juillet 2019 à 15:36:16

            bonjour zachee,

            Enfaite j'ai essayé de divisé dans la clause select en faisant 

            SELECT Free_MB/1000 fROM `carrefour_2` where VILLE="LOMME"
            

            mais cela m'affiche des nombre incohérent.

            Free_MB/1000
            0.398
            0.02
            0.01
            0.062
            0.039
            0.042
            0.065
            0.039

            pour 39Mo ça m'affiche bien 0.039 mais 65 000 Mo,il m'affiche 0.065 comme si dessus.

            Je comprend que c'est facile pour vous mais moi je bloque^^ ça peut être tous con mais au moins j'apprends en faisant des erreurs :)

            • Partager sur Facebook
            • Partager sur Twitter
              4 juillet 2019 à 16:09:36

              Est-ce que ta colonne Free_MB ne serait pas de type VARCHAR, par hasard ?
              • Partager sur Facebook
              • Partager sur Twitter
                4 juillet 2019 à 16:15:19

                Bonjour,

                Zachee54 a écrit:

                Est-ce que ta colonne Free_MB ne serait pas de type VARCHAR, par hasard ?

                Si, c'est le titre du sujet ...

                Peut-on avoir un exemple de valeurs contenues dans la colonne en question ?

                Si elles contiennent des espaces comme séparateur de milliers, il faut les retirer d'abord ...

                Le plus propre selon moi serait de faire :

                REPLACE( REPLACE( Free_MB, 'Mo', '' ), ' ', '' ) / 1000 AS Free_GB

                On enlève le "Mo", puis les espaces, puis on divise par 1000.

                -
                Edité par Benzouye 4 juillet 2019 à 16:20:16

                • Partager sur Facebook
                • Partager sur Twitter
                Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                  4 juillet 2019 à 16:44:57

                  bonjour benzouye,

                  Effectivement il y a des espaces dans la colonnes en question.

                  Voilà quelques valeurs contenues dans la colonne:

                  Free_MB
                  16 391
                  20 410
                  10 192
                  39 669
                  398 068
                  41 947
                  10 750
                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 juillet 2019 à 16:53:04

                    Benzouye a écrit:

                    Le plus propre selon moi serait de faire :

                    REPLACE( REPLACE( Free_MB, 'Mo', '' ), ' ', '' ) / 1000 AS Free_GB

                    Si il n'y a que des espaces (et pas de "Mo"), alors tu peux faire :

                    SELECT REPLACE( Free_MB, ' ', '' )/1000
                    FROM `carrefour_2`
                    WHERE VILLE="LOMME"

                    MySQL se charge tout seul de caster le texte en nombre ... mais il s'arrête au premier caractère alphabétique rencontré, y compris les espaces.

                    -
                    Edité par Benzouye 4 juillet 2019 à 17:04:22

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                      4 juillet 2019 à 17:01:43

                      merci benzouye

                      après j'aimerais le faire en une seule fois avec toute les autre valeurs.

                      $querySelect=$bdd->query('SELECT VILLE,VM,Disque,Capacity,Free_MB,Free_P,OS,date_modif from carrefour_2');
                      

                      ça serait le faire dans cette requête.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 juillet 2019 à 17:06:51

                        Euh ... oui ... c'est quoi le problème ?

                        Tu remplaces juste "Free_MB" par le REPLACE donné juste avant ...

                        SELECT
                        	VILLE,
                        	VM,
                        	Disque,
                        	Capacity,
                        	REPLACE( Free_MB, ' ', '' ) / 1000 AS Free_GB,
                        	Free_P,
                        	OS,
                        	date_modif
                        FROM carrefour_2
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                          4 juillet 2019 à 17:09:49

                          il y a un problème quand je remplace free_Mb par le replace.

                          Lorsque je le remplace, il ne reconnais pas le from et ducoup il y a une erreur.

                          Parse error: syntax error, unexpected '', '' (T_CONSTANT_ENCAPSED_STRING), expecting ',' or ')' in /var/www/site_carrefour/index.php on line 34

                          la ligne 34 c'est celle ou j'ai remplacer le Free_MB

                          • Partager sur Facebook
                          • Partager sur Twitter
                            4 juillet 2019 à 17:15:46

                            L'erreur est une erreur PHP, pas SQL ...

                            PHP te dit gentiment qu'il trouve un apostrophe là où il ne devrait pas en trouver ...

                            Si tu encadres ta requête SQL avec des apostrophes, tu ne peux pas en utiliser à l'intérieur de la requête, sinon PHP croît que c'est la fin de la chaîne ...

                            Soit tu les échappes avec \

                            $querySelect=$bdd->query('
                            	SELECT
                            		VILLE,
                            		VM,
                            		Disque,
                            		Capacity,
                            		REPLACE( Free_MB, \' \', \'\' ) / 1000 AS Free_GB,
                            		Free_P,
                            		OS,
                            		date_modif
                            	FROM carrefour_2;'
                            );

                            Soit tu utilises des guillemets :

                            $querySelect=$bdd->query('
                            	SELECT
                            		VILLE,
                            		VM,
                            		Disque,
                            		Capacity,
                            		REPLACE( Free_MB, " ", "" ) / 1000 AS Free_GB,
                            		Free_P,
                            		OS,
                            		date_modif
                            	FROM carrefour_2;'
                            );

                            Je pense qu'il te faut vraiment suivre un cours PHP/MySQL du début pour reprendre les bases de la gestion des chaines de caractères ...

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                              5 juillet 2019 à 10:14:44

                              Désolé du retard pour la réponse.

                              Merci beaucoup Benzouye,

                              c'est vrai que je suis débutant sur php et que je ne mettais jamais vraiment penché sur la gestions des chaines de caractères alors que c'est très facile. Je m'excuse d'avance^^

                              Passer une bonne journée et merci à tous :)

                              • Partager sur Facebook
                              • Partager sur Twitter

                              convertir un varchar en decimal <1

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown