Sélectionner le max d'une VarChar

Résolu
PatBlarg Messages postés 67 Date d'inscription jeudi 26 juin 2008 Statut Membre Dernière intervention 11 mai 2010 - 16 déc. 2008 à 21:58
PatBlarg Messages postés 67 Date d'inscription jeudi 26 juin 2008 Statut Membre Dernière intervention 11 mai 2010 - 18 déc. 2008 à 18:58
Bonjour, j'ai un gros problème de requête SQL. Plutôt 2 même...

J'ai un logiciel qui écrit des donnée numérique dans une base de donnée SQL.

Dépendant d'un certain triage que je fais, je dois aller sélectionner la valeur maximale dans une colonne créé par le logiciel.

 Problème numéro 1 :
Si j'ai des données de 5000 à 10500 par exemple, il me sélectionnera comme dernière valeur 9999.7 par exemple. (Qui serait la dernière valeur plus petite avant 10000)
Si j'ai bien compris, c'est dû au fait que la colonne est de type varchar. J'ai cherché et je suis tombé sur la fonction to_number ... mais c'est pas pour SQL Serveur Express on dirait.

Problème numéro 2 :
Pour les donnée plus grande que 999 999, les valeurs sont écritent au format suivant : 2.92060e+006
Donc ça ne fonctionne pas non plus avec ces données la....

J'ai bien tenté de faire analysé chaque valeur 1 a 1 sous VBA excel, mais avec 4 millions d'enregistrements à vérifier ça risque d'être long... (J'en avais pour près de 10 minutes pour 400 000 enregistrements)

Je pourrais tenté avec VB.NET mais je doute que ca soit plus performant.

Merci de votre aide!
A voir également:

5 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
16 déc. 2008 à 23:25
Salut

Regardes du coté de CAST et CONVERT
c'est pas parce que le nombre est en ecriture scientique que la comparaison
ne fonctionne pas

normalement

SQL server detectera 16E15 < 16E15 +1 (c'est un nombre au hasard
car le nombre sera stocké sur 32 ou 64 bits.
L'ecriture c'est pour simplifié l'affichage.

Bonne convertion
3
PatBlarg Messages postés 67 Date d'inscription jeudi 26 juin 2008 Statut Membre Dernière intervention 11 mai 2010
18 déc. 2008 à 14:13
Ça fonctionne! Presque... pas sur toute mes tables.
J'ai utilisé Cast(Data as real)

Il semblerait que mon logiciel écrit à quelque fois d'autres types de données qui me sont inconnues. Quand je spécifie une plage de temps et que ce genre de donnée s'y trouve, ca ne passe pas.

Cette donnée (qui se répète plusieurs fois) est sous forme "259::261"

Est-ce que je peux spécifié par requête SQL d'ignoré totalement les données contenant des ":" lors du cast?
0
PatBlarg Messages postés 67 Date d'inscription jeudi 26 juin 2008 Statut Membre Dernière intervention 11 mai 2010
18 déc. 2008 à 14:22
Finalement j'ai trouvé avec peu de recherche pour mon problème de ":"

Merci beaucoup pour ton aide!

Voici la requête que j'ai créé et qui me sort la valeur désirée :

SELECT max(CAST(Data as Real))
FROM [dbo].[TLData]
Where TLInstance = 11 and NOT Data LIKE '%:%' and
Timestamp between '2008-11-30'  and '2008-12-31'
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
18 déc. 2008 à 18:51
Les données avec des : c'est pas les minutes et les heures??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PatBlarg Messages postés 67 Date d'inscription jeudi 26 juin 2008 Statut Membre Dernière intervention 11 mai 2010
18 déc. 2008 à 18:58
Non, la colonne "Data" contient une valeur en kW ou en kWh dépendant des données, mais pour une raison inconnue, le logiciel semble écrire des "codes" qui contient des ":" pour son propre fonctionnement. (Je n'ai aucun controle sur celui-ci.)

Par contre, la colonne Timestamp contient bel et bien l'heure en plus de la date, mais ce n'était pas cette colonne là qui me posait problème.
0