Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Discussion: Comparer des nvarchar

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 200
    Points : 40
    Points
    40

    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.

  2. #2
    Membre Expert
    Inscrit en
    août 2009
    Messages
    1 046
    Détails du profil
    Informations forums :
    Inscription : août 2009
    Messages : 1 046
    Points : 1 750
    Points
    1 750

    Par défaut

    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

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 200
    Points : 40
    Points
    40

    Par défaut

    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?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro Frédéric BROUARD
    Expert SGBDR & SQL
    Inscrit en
    mai 2002
    Messages
    13 581
    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 : 13 581
    Points : 30 109
    Points
    30 109

    Par défaut

    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 * * * * *

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 200
    Points : 40
    Points
    40

    Par défaut

    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...

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro Frédéric BROUARD
    Expert SGBDR & SQL
    Inscrit en
    mai 2002
    Messages
    13 581
    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 : 13 581
    Points : 30 109
    Points
    30 109

    Par défaut

    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 * * * * *

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •