IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Gestion du type INT


Sujet :

MS SQL Server

  1. #1
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut Gestion du type INT
    Bonjour à tous,

    J'ai un souci dans la gestion de mes INT pour SQL-Server 1 est égal à 01, 001, 0001 ...

    Donc si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT COUNT(*) as LigneFacture
    FROM MaTable
    WHERE maFacture = 1
    C'est la même chose que ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT COUNT(*) as LigneFacture
    FROM MaTable
    WHERE maFacture = 001
    Or dans MySQL je n'ai pas ce problème, ces mêmes requêtes ne renvoient pas le même résultat. Quelqu'un pourrait m'expliquer c'est quoi le problème

  2. #2
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    un integer représentant un nombre, effectivement 1 = 01 = 001.
    Les zéros de gauche ne sont pas significatifs.

  3. #3
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    Salut Ptit_Dje et merci pour ton aide

    Mais alors comment je fais moi pour gérer ça ... Limite là je comprend pas...

    Comment je vais gérer mes numéros de factures... Je vais pas devoir passer par un varchar quand même, c'est le comble

    Je testerais sur oracle et postgres voir si j'ai le droit à la même histoire...

    Quel solutions puis-je appliquer alors ?

  4. #4
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Simplement utiliser des nombres qui sont de 1 à x.... en utilisant par exemple la propriété identity.

    1 != 2 != 3 ....

    Quel intéret de préfixer un nombre de 0 ?!
    Qu'espéreriez vous comme résultat de l'addition suivante par exemple : 001 + 000001 ? 2 ? ou alors 001000001 ?

    Oui si vous utilisez du varchar '1' != '01', cependant je n'en vois pas l'intéret ici.

  5. #5
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    L'intérêt il faudrait le demander aux comptables de ma boîte ...

    Et pour le 001 + 000001 = 2 évidemment puisque on travaille sur des INT et que la valeur 000001 est équivalent à 1. Par contre ce n'est pas la même chose...
    Cela veut quand on fera un select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select count(*) as cpt
    from matable
    where monChiffre = 001
    Il prendra tes 1 et 000001 et 0001 ...

    Alors pourquoi ne pas faire pareil avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select 1.000000000 + 0
    C'est comme si à l'insertion il enlevait automatiquement les espaces en début et fin de ligne...

    Je ne comprend pas la logique.

  6. #6
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    La logique est pourtant simple, tu utilises un type de données int, integer, nombre entier.
    Or pour un nombre entier, 01 = 0000001 = 1.

    Dans ton champ int, tu auras du mal à trouver une valeur à 0001 dans tout SGBD qui se respecte.

  7. #7
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    Et pourtant ...

    Tu fais sous MySQL Tu auras en retour 0001

    Si tu fais la même oppération sous SQL-Server tu auras en retour 1

    Puisqu'on pousse le raisonnement à son maximum pourquoi quand on fait :
    Il ne retourne pas 1.0 ? On est bien dans la même logique là, non ?

    Ce qui me déplait même si vous ne trouvez pas ça logique, c'est qu'on a introduit une logique humaine là dedans, alors qu'apparemment MySQL ne le gère pas de la même façon, je ne m'avance pas pour Oracle ni Postgres car je n'ai pas encore testé.

    Same same but different

  8. #8
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    On n'a jamais dit que MySQL était un SGBD respectable...
    Quand tu fais un select 1.0000, tu passes en type décimal, ce n'est plus du int. On parle alors de précision de décimal.

  9. #9
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    On est pas là pour faire l'apologie de tel ou tel SGBD ni pour lancer un troll, car c'est bien facile de trouver à répondre à ça

    J'ai sauté du cock à l'ane en passant de int à décimal, mais je parlais de la logique...

    Car quand tu fais un insert de 1.000000 il insèrera 1 alors pourquoi le select ne fais pas pareil ? Et là c'est la même chose pour l'insertion dans MySQL...

  10. #10
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Quand tu insert 1.0000 dans un champ de type int. Effectivement il fait la conversion et insert 1.
    Lorsque tu fais un simple select 1.00000 sans préciser de cast, il va choisir automatiquement le typage le plus approprié.
    En mettant un .000 tu précises par défaut que c'est du décimal. Il affiche donc un décimal avec la précision encore une fois la plus appropriée, donc respectant l'ensemble des décimal que tu as donné.

  11. #11
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    C'est bon, c'est bon j'arrête les base de données

    Le bon vieux fichier .txt est très bien aussi

  12. #12
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Citation Envoyé par LhIaScZkTer Voir le message
    On est pas là pour faire l'apologie de tel ou tel SGBD ni pour lancer un troll, car c'est bien facile de trouver à répondre à ça

    J'ai sauté du cock à l'ane en passant de int à décimal, mais je parlais de la logique...

    Car quand tu fais un insert de 1.000000 il insèrera 1 alors pourquoi le select ne fais pas pareil ? Et là c'est la même chose pour l'insertion dans MySQL...
    Tu as raison, chaque SGBD à ses pours et ses contres.
    Il faut en tenir compte et savoir comment le SGBD que tu utilises réagis.
    Après les différences de comportement entre chaque SGBD doivent faire l'objet d'une analyse dans le cadre d'une migration car justement, tu arrives sur de tels problèmes.

    Petite parenthèse humouristique... Ou pas...
    Quand tu passes du cock à l'ane... WAOW... Quel changement de calibre...

  13. #13
    Membre éclairé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Par défaut
    Personnellement, un SGBDR qui considère que l'entier 1 est différent de l'entier 01, ça m'embêterai énormement : ils ont la même valeur, ils sont donc égaux, le 0 à gauche n'est pas significatif. C'est mathématique, le type "int" représentant les entiers. Si tu ne considère pas la valeur, mais considères la chaine, dans ce cas, il faut utiliser des variables de type chaine de charactères... Ca me semble tout à fait légitime...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Hibernate] Pb avec type int
    Par raj dans le forum Hibernate
    Réponses: 1
    Dernier message: 31/03/2006, 21h10
  2. Réponses: 3
    Dernier message: 23/02/2006, 09h37
  3. Gestion des types de variables en Assembleur
    Par AsmCode dans le forum Assembleur
    Réponses: 13
    Dernier message: 17/10/2005, 20h34
  4. Réponses: 9
    Dernier message: 06/07/2005, 14h20
  5. GEstion des types! Besoin d'aide il me manque quelques trucs
    Par popogendarme dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 03/02/2005, 18h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo