Précédent   Forum du club des développeurs et IT Pro > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/02/2013, 18h24   #1
neperien
Invité régulier
 
Homme
Inscription : mai 2012
Messages : 42
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2012
Messages : 42
Points : 5
Points : 5
Par défaut Comparer des nvarchar

Bonjour,
j'ai une table de nvarchar et j'aimerais comparer dans un select :
Code :
SELECT * FROM ALIMENT WHERE Sodium > 0,5
Évidemment ça ne marche pas, je dois réécrire la base ou il y a une requête miracle qui permet d'éviter cela ?
Merci d'avance.
neperien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 18h45   #2
Rei Ichido
Membre Expert
 
Inscription : août 2009
Messages : 1 012
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 1 012
Points : 1 532
Points : 1 532
Il faudrait être un peu plus précis (SGBDR, infos sur la table), mais a priori votre problème c'est que la colonne "Sodium" de votre table "Aliment" est en nvarchar au lieu d'être un gentil nombre ?
Le mieux c'est de toute façon de modifier le modèle - ça peut avoir des impacts sur des programmes appelants (s'ils sont mal faits), mais ça vous évitera à terme bien des soucis (comme d'avoir des formats différents, voire des valeurs qui ne sont pas des nombres).

Ensuite, si ce n'est pas possible pour une raison ou une autre, selon le SGBD, il faut faire de la conversion à la volée Avec bien sûr le risque d'erreur si quelqu'un a rentré 'Trop' dans la colonne Sodium
Rei Ichido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 18h59   #3
neperien
Invité régulier
 
Homme
Inscription : mai 2012
Messages : 42
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2012
Messages : 42
Points : 5
Points : 5
Il n'y a pas de sgbd, je fais le tout en c# par les sqlCEServer. Je vais tenter les conversions à la volée, c'est possible en sql pure?
neperien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 19h11   #4
SQLpro
Rédacteur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 12 074
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 12 074
Points : 21 669
Points : 21 669
SQL est un langage fortement typé ! On est pas sous Excel !!!

Vous essayer de comparer du texte avec un nombre, en sus mal écrit.

Un nombre bien écrit ce serait 0.5 et non 0,5 (point et pas virgule).

Cependant vous me dites avoir des nvarchar... C'est à dire des chaînes de caractères. Il faut donc comparer une chaine de caractères à une autre chaine de caractères !

Autrement dit :

Code :
SELECT * FROM ALIMENT WHERE Sodium > '0,5'
Commencez par apprendre SQL. Mon bouquin, comme mon site web peuvent vous y aider !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 19h20   #5
neperien
Invité régulier
 
Homme
Inscription : mai 2012
Messages : 42
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2012
Messages : 42
Points : 5
Points : 5
cette requete s'execute mais j'ai des problèmes de résultats incohérents:
Code :
1
2
3
SELECT     *
FROM            Aliment
WHERE        (Sodium > '130')
Me donne des sodiums < 130...
neperien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 19h32   #6
SQLpro
Rédacteur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 12 074
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 12 074
Points : 21 669
Points : 21 669
C'est normal, vous comparez des chaines de caractères à des chaines de caractères. Si vous voulez comparez des nombre il aurait fallut les stocker avec une colonne de type FLOAT !

On ne vous a pas appris à l'école qu'on ne devait pas mélanger les choux et les carottes ?

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h04.


 
 
 
 
Partenaires

Hébergement Web