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 :

Extraire nombres depuis une expression mathématique


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 223
    Par défaut Extraire nombres depuis une expression mathématique
    Salut à toutes et à tous,

    J'ai une expression mathématique avec des signes '+' et '-', par exemple '-10-20+30-40-50+60'. Je veux extraire les nombre depuis cette expression de façon à avoir, dans une table temporaire:
    -10
    -20
    30
    -40
    -50
    60

    (vous remarquez que le signe '+' ne figure pas dans les nombre)
    Comment faire ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Par défaut
    fais de la lecture caractère par caractère
    tu avance jusqu'à trouver un signe, et tu continue

    '-10-20+30-40-50+60'
    en gros tu lit les premiers caractères : ' - ' tu le notes
    apres tu avance, tu vois le 1, le0, et tu tombe sur ' - '.

    Tu fabrique donc le nombre 10 (soit en faisant *10 à chaque fois, soit en faisant un atoi sur la sous-chaine

    tu as noté le ' - ' précédant et tu continue d'avancer.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 002
    Billets dans le blog
    6
    Par défaut
    Exemple:
    La fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    CREATE FUNCTION F_T_NOMBRES (@DATA VARCHAR(max)) 
    RETURNS @T TABLE (NOMBRE VARCHAR(64))
    AS
    BEGIN
    IF @DATA IS NULL RETURN
    IF LEN(@DATA) = 0  RETURN
    DECLARE @I INT, @C CHAR(1), @A VARCHAR(64)
    SELECT @I = 1, @A = ''
    WHILE @I < LEN(@DATA)
    BEGIN
       SET @C = SUBSTRING(@DATA, @I, 1)
       IF @C IN ('0', '1', '2', '3', '4', '5', '6', '7', '8','9', '.', '-')  
          IF @C = '-' AND LEN(@DATA) > 0
          BEGIN
     
             IF LEN(@A) > 0
             BEGIN
                 INSERT INTO @T VALUES (@A)--(CAST(@A AS FLOAT))
                 SET @A = @C
             END
          END
          ELSE
             SET @A = @A + @C
       ELSE
       BEGIN
          IF LEN(@A) > 0
          BEGIN
             INSERT INTO @T VALUES (@A)--(CAST(@A AS FLOAT))
             SET @A = ''
          END
       END
       SET @I =  @I + 1
    END
    RETURN
    END
    GO
    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT *
    FROM   dbo.F_T_NOMBRES ('-10-20+30-40-50+60')
    Le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NOMBRE
    ----------------------------------------------------------------
    10
    -20
    30
    -40
    -50
    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/ * * * * *

  4. #4
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 223
    Par défaut
    Merci bcp pour votre réponse Je vais essayer ce code.

  5. #5
    Membre confirmé
    Inscrit en
    Août 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 223
    Par défaut
    Justement, le signe "-" pour le 10 ne figure pas dans le résultat, alors qu'il faut qu'il figure !!! En plus, est-ce qu'on peut la généraliser pour traiter les opérations "+", "-", "*" et "/" ?

  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 002
    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 002
    Billets dans le blog
    6
    Par défaut
    A vous de l'adapter...

    Si vous voulez que je m'en occupe, mes tarifs en tant qu'indépendant sont sur la base de 1200 euros la journée HT, une journée minimum.

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

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Par défaut
    \o/

Discussions similaires

  1. Evaluer une expression mathématique
    Par sbeu dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/07/2007, 18h28
  2. [Requête] SQL(ACCESS) extraire nombre d'une chaîne
    Par BORDEAUX4 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/03/2007, 16h45
  3. Réponses: 2
    Dernier message: 20/11/2006, 21h19
  4. [C++.NET] Extraction de nombres depuis une TextBox
    Par KaeRZed dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 19/04/2006, 13h57
  5. Analyser une expression mathématique
    Par Amokrane dans le forum C++
    Réponses: 5
    Dernier message: 06/01/2006, 13h36

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