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

Développement SQL Server Discussion :

converstion de donnée string à un nombre à une string


Sujet :

Développement SQL Server

  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut converstion de donnée string à un nombre à une string
    salut

    dans une table de type varchar(255) j'ai les valeurs suivant en plus de certaine qui sont null

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    188.74375
    222.61041666666668
    258.71562500000005
    222.61041666666668
    258.71562500000005
    258.71562500000005
    171.8104166666667
    222.61041666666668
    303.765625
    573.23125
    176.47708333333335
    239.315625
    470.33125
    222.61041666666668
    222.61041666666668
    222.61041666666668
    222.61041666666668
    570.23125
    222.61041666666668
    222.61041666666668
    222.61041666666668
    222.61041666666668
    329.16562500000003
    674.8312500000001
    227.27708333333337
    340.91562500000003
    673.8312500000001
    222.61041666666668
    222.61041666666668
    198.67708333333334
    285.865625
    264.71562500000005
    478.63125
    419.83125000000007
    626.5875000000001
    222.61041666666668
    329.16562500000003
    674.8312500000001
    227.27708333333337
    340.91562500000003
    673.8312500000001
    222.61041666666668
    222.61041666666668
    205.67708333333334
    188.74375
    171.8104166666667
    154.87708333333333
    207.91562500000003
    182.515625
    157.11562500000002
    131.715625
    214.63125000000002
    163.83125
    555.8312500000001
    276.91562500000003
    104.0 
    25.0
    50.0
    50.0
    25.0
    171.8104166666667
    188.74375
    222.61041666666668
    198.67708333333334
    285.865625
    264.71562500000005
    478.63125
    419.83125000000007
    222.61041666666668
    222.61041666666668
    222.61041666666668
    205.67708333333334
    222.61041666666668
    205.67708333333334
    222.61041666666668
    je tente de prendre les valeur et de garder seulement 2 chiffre après le .

    j'ai tenté plusieurs opérations sans succès...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    round(dim,1,1),
    round(cast(dim as real),1,1)
    j'obtiens toujours le message

    Error converting data type varchar to float.
    ou bien

    Error converting data type varchar to real.
    une idée?

    merci

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Vérifie qu'il n'y a pas d'espace invisibles dans certainnes valeurs.

    D'ailleurs limite toi à une seule valeur pour tes tests.

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Vous auriez surtout tout intérêt à stocker vos données au type qui convient.
    Néanmoins je vas vous donner un exemple en T-SQL qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    CREATE TABLE TbFloatValues
    (
    	val VARCHAR(255)
    )
    GO
     
    INSERT INTO dbo.TbFloatValues VALUES ('188.74375')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('258.71562500000005')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('258.71562500000005')
    INSERT INTO dbo.TbFloatValues VALUES ('258.71562500000005')
    INSERT INTO dbo.TbFloatValues VALUES ('171.8104166666667')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('303.765625')
    INSERT INTO dbo.TbFloatValues VALUES ('573.23125')
    INSERT INTO dbo.TbFloatValues VALUES ('176.47708333333335')
    INSERT INTO dbo.TbFloatValues VALUES ('239.315625')
    INSERT INTO dbo.TbFloatValues VALUES ('470.33125')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('570.23125')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('329.16562500000003')
    INSERT INTO dbo.TbFloatValues VALUES ('674.8312500000001')
    INSERT INTO dbo.TbFloatValues VALUES ('227.27708333333337')
    INSERT INTO dbo.TbFloatValues VALUES ('340.91562500000003')
    INSERT INTO dbo.TbFloatValues VALUES ('673.8312500000001')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('198.67708333333334')
    INSERT INTO dbo.TbFloatValues VALUES ('285.865625')
    INSERT INTO dbo.TbFloatValues VALUES ('264.71562500000005')
    INSERT INTO dbo.TbFloatValues VALUES ('478.63125')
    INSERT INTO dbo.TbFloatValues VALUES ('419.83125000000007')
    INSERT INTO dbo.TbFloatValues VALUES ('626.5875000000001')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('329.16562500000003')
    INSERT INTO dbo.TbFloatValues VALUES ('674.8312500000001')
    INSERT INTO dbo.TbFloatValues VALUES ('227.27708333333337')
    INSERT INTO dbo.TbFloatValues VALUES ('340.91562500000003')
    INSERT INTO dbo.TbFloatValues VALUES ('673.8312500000001')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('205.67708333333334')
    INSERT INTO dbo.TbFloatValues VALUES ('188.74375')
    INSERT INTO dbo.TbFloatValues VALUES ('171.8104166666667')
    INSERT INTO dbo.TbFloatValues VALUES ('154.87708333333333')
    INSERT INTO dbo.TbFloatValues VALUES ('207.91562500000003')
    INSERT INTO dbo.TbFloatValues VALUES ('182.515625')
    INSERT INTO dbo.TbFloatValues VALUES ('157.11562500000002')
    INSERT INTO dbo.TbFloatValues VALUES ('131.715625')
    INSERT INTO dbo.TbFloatValues VALUES ('214.63125000000002')
    INSERT INTO dbo.TbFloatValues VALUES ('163.83125')
    INSERT INTO dbo.TbFloatValues VALUES ('555.8312500000001')
    INSERT INTO dbo.TbFloatValues VALUES ('276.91562500000003')
    INSERT INTO dbo.TbFloatValues VALUES ('104.0 ')
    INSERT INTO dbo.TbFloatValues VALUES ('25.0')
    INSERT INTO dbo.TbFloatValues VALUES ('50.0')
    INSERT INTO dbo.TbFloatValues VALUES ('50.0')
    INSERT INTO dbo.TbFloatValues VALUES ('25.0')
    INSERT INTO dbo.TbFloatValues VALUES ('171.8104166666667')
    INSERT INTO dbo.TbFloatValues VALUES ('188.74375')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('198.67708333333334')
    INSERT INTO dbo.TbFloatValues VALUES ('285.865625')
    INSERT INTO dbo.TbFloatValues VALUES ('264.71562500000005')
    INSERT INTO dbo.TbFloatValues VALUES ('478.63125')
    INSERT INTO dbo.TbFloatValues VALUES ('419.83125000000007')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('205.67708333333334')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    INSERT INTO dbo.TbFloatValues VALUES ('205.67708333333334')
    INSERT INTO dbo.TbFloatValues VALUES ('222.61041666666668')
    GO
     
    SELECT CAST(val AS NUMERIC(8, 2))
    FROM dbo.TbFloatValues
    WHERE val IS NOT NULL
    Vous pouvez placer le dernier SELECT dans une procédure stockée, et appeler celle-ci dans votre code.

    Mais vous pouvez faire encore plus simple : changer le type de données de votre colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE dbo.TbFloatValues
    ALTER COLUMN val NUMERIC(19, 14)
    Dans ce dernier bout de code, 19 précise le nombre de chiffres à droite et à gauche de la virgule, tandis que 14 précise le nombre de chiffres à droite de la virgule, et il vous en coûtera 9 octets par valeur, au lieu des 18 que vous utilisez pour stocker par exemple la valeur 222.61041666666668 ...

    Pour voir avec précision les choix dont vous disposez, c'est par ici

    @++

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    il y a effectivement une valeur avec un espace....

    en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from att where dim='104.0 '
    je vois bien la valeur.. mais si je mets pas d'espace ou bien j'en mais plusieurs après le 0.... il me sort la même ligne...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    update woattribute set dim='104.0' where dim='104.0 '
    j'obtiens le message: 1 row(s) affected

    je teste alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from att where dim='104.0 '
    donc avec un espace... et j'ai toujours une ligne d'affectée...

    edit: c'étais pas un espace mais un saut de ligne... c'est maintenant corrigé... merci

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

Discussions similaires

  1. Transformer un Tableau de String en seul une string
    Par jojob dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 31/05/2011, 13h44
  2. évaluer une string en nombre
    Par robert_trudel dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/02/2009, 20h53
  3. Réponses: 9
    Dernier message: 25/06/2008, 16h48
  4. [string] vérifier si une string en contient une autre
    Par vasilov dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/12/2005, 14h50
  5. Longueur d'une string et nombre de pixels correspondant
    Par Alex Laforest dans le forum Langage
    Réponses: 2
    Dernier message: 26/08/2005, 09h22

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