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

Langage SQL Discussion :

Extraction d'un chiffre à partir d'un champ texte contenant chiffre et lettrre


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 202
    Points : 108
    Points
    108
    Par défaut Extraction d'un chiffre à partir d'un champ texte contenant chiffre et lettrre
    Bonjour a tous,

    j'ai un champ varchar(25) dans sql serveur qui contient la valeur suivante: 'ACHAT 05 Tonnes ' et 'ACHAT 105,50 Tonnes '
    Ma question est celle-ci, quel code pour extraire uniquement les valeurs numérique (5 et 105,5). merci d'avance.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 219
    Points
    8 219
    Billets dans le blog
    17
    Par défaut
    Il faudrait définir ce que tu appelles "valeurs numérique".

    Avec MySQL pour sortir la 1re sous-chaîne qui ressemblerait à un nombre :

    SELECT REGEXP_SUBSTR('ACHAT 105,50 Tonnes', '\\d+(,\\d+)?'); -- 105,50
    Je suppose qu'il doit y avoir un équivalent avec MS SQL Server.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    bonjour,

    Deux remarques :
    • la notion de "champ" ne concerne que les formulaires de saisie ou les états, mais n'existe pas dans les bases de données relationnelles.
    • une colonne (et non pas un "champ" donc), ne devrait jamais contenir plusieurs informations, c'est un viol de la première forme normale.
      Ici, vous avez à la fois le type de mouvement (achat ou vente), la quantité (105) et l'unité de mesure de cette quantité (tonne).
      Il faudrait donc avoir 3 colonnes et non pas une seule, et le problème technique auquel vous êtes confronté ne se poserait pas !


    À noter que si votre colonne "fourre tout" contient quelque chose comme '"1er achat de 1,5 tonnes", vous êtes marron...

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 219
    Points
    8 219
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    À noter que si votre colonne "fourre tout" contient quelque chose comme '"1er achat de 1,5 tonnes", vous êtes marron...
    SELECT REGEXP_SUBSTR('1er ACHAT 105,50 Tonnes', '\\d+(,\\d+)?'); -- 1
    Avec une assertion de limite de mot :

    SELECT REGEXP_SUBSTR('1er ACHAT 105,50 Tonnes', '\\b\\d+(,\\d+)?\\b'); -- 105,50
    Mais on est bien d'accord que ça ne peut pas être une solution pérenne.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    @Seb : ce que je voulais dire, c'est qu'un tel type de contenus peut proposer tantôt une seule zone numérique, tantôt plusieurs, on ne saurait donc en extraire la bonne de façon automatique...

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 219
    Points
    8 219
    Billets dans le blog
    17
    Par défaut
    On est bien d'accord. Ma réponse avait pour seul but d'illustrer qu'avec un "définir ce que tu appelles "valeurs numérique"" précis on pouvait se débrouiller pour avoir un résultat pas trop déconnant. Avec ma seconde proposition en conservant le premier numérique isolé.

    Mais ça reste de la débrouille non pérenne.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 17
    Dernier message: 02/07/2020, 19h50
  2. Réponses: 0
    Dernier message: 04/04/2009, 09h16
  3. [MySQL] remplir une liste à partir d'un champs texte
    Par myinformatique dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 27/07/2007, 17h10
  4. Réponses: 15
    Dernier message: 26/07/2007, 13h52

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