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 :

Comment convertir une chaine en "data type" ?


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 306
    Par défaut Comment convertir une chaine en "data type" ?
    Bonjour à tous,

    Dans une table j'ai :
    - MyValue : colonne (varchar) qui stocke une valeur
    - MyType : colonne (varchar) qui stocke le type de MyValue, mais au format "chaine de caractères"

    Par exmple pour une ligne j'ai :
    - MyValue : 25
    - MyType : int

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CONVERT(MyType, MyValue)
    FROM MyTable
    Comment faire fonctionner ma requête ?

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Il n'est pas possible de faire cela directement, car un type est un objet (en fait vous passez le nom d'une type et non pas une valeur) .

    Première possibilité, du SQL dynamique
    Deuxième possibilité un WHERE.. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CAST(MyValue, INT) AS VALEUR_INT
    FROM MyTable
    WHERE MyType = 'int'
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 306
    Par défaut
    En fait je dois stocker des valeurs de caractéristiques de produits.
    Par exemple je dois stocker dans cette même table, la "capacité de disques durs", ce sera donc des entiers.
    Je dois aussi stocker une "marque" par exemple, c'est du texte.
    Je veux ensuite pouvoir faire un tri sur les "capacités de disques durs" tout en triant numériquement et non textuellement.

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Pour ce genre de choses, le mieux, c'est de prendre l'une de ces trois solutions :
    - Utiliser une table par type d'attribut (en mettant éventuellement en place un héritage)
    - Utiliser une colonne XML
    - Utiliser une colonne JSON

    L'avantage des deux derniers, c'est que le requêtage est simplifié par la possibilité d'inclure du XPATH ou JSON dans la requête SQL, le tout en permettant l'utilisation d'index.
    => Et en plus la plupart des langages de haut niveau permettent de sérialiser/désérialiser en XML ou JSON très simplement, ce qui réduira donc votre quantité de code.

    *-*-*-*-*-*

    Sinon, pour répondre à la question avec votre modèle actuel (mais gare aux perfs et plantages si des données ne sont pas cohérentes - genre '2 To' au lieu de '2000000000000' pour la capacité) :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select product_id, attr_value
    from attribut
    where attr_name = 'capacite'
    order by cast(attr_value as int)

  5. #5
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 306
    Par défaut
    En fait mon problème orignal c'est :

    J'ai une table ARTICLE et une table SPEC (comme spécification)
    Une table VAL (comme valeur)

    VAL.Valeur est la valeur d'une SPEC d'un ARTICLE

    Par exemple 5 est la valeur de "Nombre de cœurs" du "processeur Intel"

    Nom : IMG_20170508_134200.jpg
Affichages : 163
Taille : 785,5 Ko

    J'espère avoir été clair.

    Du coup comment stocker ces valeurs pour pouvoir filtrer textuellement, numériquement et binairement ?

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    En XML vous créez une collection de schémas XML définissant ce que contiendra votre document XML.
    Dans votre table article, vous ajouter une colonne XML typée avec cette collection de schéma.
    Pour la saisie initiale dans un INSERT, vous alimentez la colonne XML.
    Pour modifier le contenu d'un des éléments d'un docment XML, utilisez la méthode modify appliquée au document XML
    Vous pouvez présenter les données XML sous forme tabulaire avec, par exemples, une vue.

    Un exemple simplifié : https://blog.developpez.com/sqlpro/p...-modele-en-xml

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Comment convertir une chaine avec accent
    Par bjo393 dans le forum Langage
    Réponses: 5
    Dernier message: 25/04/2013, 14h10
  2. Réponses: 4
    Dernier message: 06/06/2006, 11h07
  3. Réponses: 3
    Dernier message: 25/04/2006, 23h07
  4. Réponses: 2
    Dernier message: 03/10/2005, 16h23

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