Probleme de virgule [Résolu]

colonelblondass 12 Messages postés jeudi 30 juin 2011Date d'inscription 22 février 2012 Dernière intervention - 8 nov. 2011 à 10:20 - Dernière réponse : dbashell 3 Messages postés dimanche 27 novembre 2011Date d'inscription 27 novembre 2011 Dernière intervention
- 27 nov. 2011 à 11:59
Bonjour à vous Forum,

J'ai un énorme problème en SQL.

J'ai une table avec plus de 21 millions d'enregistrements et en l'important, la colonne avec la pondération a eu un problème : les virgules ont disparu (ce qui veut dire qu'à la place d'avoir "2.452" j'ai "2452.0" .

Je suis sur SQL server et j'ai mis ma colonne en float.

Puis-je faire quelque chose d'autre que me retaper l'importation qui a duré très longtemps ?

Merci à vous,

Cordialement,

ColonelBlondass
Afficher la suite 

Votre réponse

8 réponses

cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 8 nov. 2011 à 11:05
+3
Utile
Bonjour,

Tu as importé ca à partir de quel fichier ?

Tu devrais pouvoir t'en tirer avec des UPDATE mais je ne peux pas t'en dire plus si tu ne me donnes pas plus d'informations.

En règle générale, quand tu as une table énorme, essaye d'abord de tester les modifs sur un petit échantillon.

Là tu peux toujours créer une autre table en ne sélectionnant que 200 lignes et voir comment tu peux t'en sortir avec les update.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Julien39
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 8 nov. 2011 à 11:32
+3
Utile
Voilà, il suffit que tu créé un fichier decoupe.vbs et que tu colles ca dedans :

nom_fichier_entree = "D:\fichier.txt"
nom_fichier_sortie = "D:\res.txt"

Dim fichierSortie
Dim fichierEntree
Set fichierSortie = CreateObject("Scripting.FileSystemObject").OpenTextFile(nom_fichier_sortie, 2, True)
Set fichierEntree = CreateObject("Scripting.FileSystemObject").OpenTextFile(nom_fichier_entree, 1, False)
Dim compteur
Dim ligne

compteur=0
Do While fichierEntree.AtEndOfStream = False And compteur < 100
ligne = fichierEntree.ReadLine
fichierSortie.write(ligne)
fichierSortie.writeBlankLines 1
compteur=compteur+1
Loop
fichierEntree.Close
fichierSortie.Close


Ensuite, tu modifie le code pour donner le chemin vers ton fichier à découper (nom_fichier_entree) et le chemin vers le resultat (nom_fichier_sortie).

Avec ce code, tu pourras découper les 100 premieres lignes de ton fichier et voir à quoi elles ressemblent.

Ensuite donne moi les 10 premières lignes si tu as des soucis
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Julien39
colonelblondass 12 Messages postés jeudi 30 juin 2011Date d'inscription 22 février 2012 Dernière intervention - 8 nov. 2011 à 11:09
0
Utile
Merci Julien,

J'ai bien testé avec des update sur des morceau de ma table, mais je galère.

J'ai importé un fichier txt de plusieurs go, je ne peux ni l'ouvrir avec bloc-notes, ni avec rien de ma connaissance si ce n'est SQL-server.
Commenter la réponse de colonelblondass
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 8 nov. 2011 à 11:13
0
Utile
Tu travailles sur un poste de travail windows, unix ou linux ?

Je vais te donner un truc qui permet de fractionner ton fichier.
Commenter la réponse de cs_Julien39
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 8 nov. 2011 à 11:29
0
Utile
Avec SQL server, c'est forecement windows, attend une seconde, je te bidouille un code.
Commenter la réponse de cs_Julien39
colonelblondass 12 Messages postés jeudi 30 juin 2011Date d'inscription 22 février 2012 Dernière intervention - 8 nov. 2011 à 11:50
0
Utile
J'ai vu mon problème, j'ai exporté la table en format texte, et j'ai découvert ceci :
sur le fichier importer, le séparateur est ";" et les décimales ","
sur le fichier exporter, le séparateur est "," et il n'y a pas de décimales.

J'ai du mal importer mon fichier.

Vu que quand j'avais 3.154 c'est devenu 3154, si je divise toute ma colonne pas 1000, mes chiffres redeviennent bons. (merci à un membre d'un autre forum).

Ton code pour couper les fichiers est excellent, il va bien me servir par la suite.

Merci beaucoup.

Amitiés,

Colonel Blondass
Commenter la réponse de colonelblondass
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 8 nov. 2011 à 13:12
0
Utile
Attention, cette solution n'est valable que si tu n'as que trois et seulement trois chiffres après la virgule.

Par exemple 3,154 et 31,54 pourraient être devenus 3154. Comment les différencient tu ?

Si tu as toujours 3 chiffres, c'est bon.

C'est ce genre de particularité sur le fichier que j'aurais bien aimé voir si tu m'avais donné quelques lignes en exemples.

Si tu ne veux pas que ca traine sur internet, je supprimerai le message après.
Commenter la réponse de cs_Julien39
dbashell 3 Messages postés dimanche 27 novembre 2011Date d'inscription 27 novembre 2011 Dernière intervention - 27 nov. 2011 à 11:59
0
Utile
Salut les gars,
juste pour votre culture (et peut-être pour l'avenir), ce n'ai pas parce que SQL server tourne forcement sous windows que vous ne pouvez pas scripter depuis un bon vieux linux !!!
Il vous suffit d'installer FreeTds (sous Linux ou autre) qui est un client tds donc compatible SQL server et Sybase et le tour est joué ...
Pour l'installer, vous pouvez utiliser ce post qui est très bien fait "install freetds"
A partir de là, vous bénéficier de toute la puissance des outils "unix like" comme le shell par exemple.

Un bon script pour ne pas faire deux fois la même chose ...
Commenter la réponse de dbashell

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.