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 :

Concaténation entre string


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 80
    Points : 54
    Points
    54
    Par défaut Concaténation entre string
    Bonjour,
    svp j'ai un problème un peu bizarres j'ai une fonction FCLtransformation_chiffres_literraux

    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
     
    ALTER FUNCTION [dbo].[FCLtransformation_chiffres_literraux](@i decimal)
     
     
    RETURNS nvarchar(1000)
    AS
    BEGIN
    declare @premierepartie int
    declare @deuxiemepartie decimal
    declare @resultat nvarchar(1000)
    set @premierepartie=floor(@i)
    set @deuxiemepartie=@i-floor(@i)
    if @i<20
    set @resultat=dbo.FCL0_19(floor(@i))+' '+substring (cast((@i-floor(@i)) as nvarchar),3,2) +' EURO'
     
     
     
    	RETURN @resultat
     
    END
    l'execution de la fonction dbo.FCL0_19 returne un string mais le probleme la partie substring (cast((@i-floor(@i)) as nvarchar),3,2) ne retourne rien

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select FCLtransformation_chiffres_literraux(15.36)
    l'excution de cette fonction retourne la chaine de caractères suivantes

    QUIZE ET EURO
    ET NON PAS QUIZE ET 36 EURO
    EST CE QUE le problème dans la fonction FCLtransformation_chiffres_literraux ou dans la partie returns

    Merci d'avance pour votre aide!!!!

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    En France la valeur 15.36 exprimée en euro se dit "Quinze euros et 36 centimes" et non pas "QUIZE ET 36 EURO" !!!
    De même, on parle de la "Monnaie unique", rarement de Monique !

    Pour le reste, le problème
    substring (cast((@i-floor(@i)) as nvarchar),3,2) ne retourne rien...
    provient du fait que vous n'avez indiqué ni la précision ni l'échelle lors de l'utilisation du type décimal. L'échelle par défaut est 0 (zéro). Ce qui Explique les problèmes que vous rencontrez...

    Vous devez essayer de réécrire votre fonction en utilisant par exemple le type decimal(18,2) au lieu de decimal tout court (équivaut à decimal(18,0) ; 18 étant la précision par défaut, l'échelle par défaut étant 0 (zéro), c.à.d plus de centimes !). Exemple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DECLARE @i DECIMAL(18,2); 
    SET @i = 15.36; 
    SELECT SUBSTRING (CAST((@i-FLOOR(@i)) AS NVARCHAR),3,2);
    Resultat OK, la chaîne de 2 caractères ci-dessous :
    A+
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

  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
    21 772
    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 : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Au lieu de réinventer mal, la roue, inspirez vous des fonctions que j'ai donné ici :
    http://sqlpro.developpez.com/cours/sqlserver/udf/
    CONVERSION DE NOMBRE EN LITTERAUX :
    sous fonctions :
    FN_NEC_20 : transformation des nombres de 1 à 19 en littéraux
    FN_NEC_100 : transformation des nombres de 20 à 99 en littéraux
    FN_NEC_0_100 : transformation des nombres de 0 à 100 en littéraux
    fonction principale :
    FN_NOMBRE_EN_CHIFFRE : transformation de n'importe quel nombre
    entier de l'intervalle [- 2 147 483 648 ; 2 147 483 647]

    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. [VBA-E] Bug dans la concaténation de String
    Par krollkop dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 01/06/2006, 11h41
  2. Différence entre String et Int
    Par Alchimist dans le forum Langage
    Réponses: 6
    Dernier message: 05/04/2006, 11h00
  3. différence entre <string.h> et <string>
    Par mister3957 dans le forum C++
    Réponses: 3
    Dernier message: 20/03/2006, 19h33
  4. Concaténation de String et Integer
    Par Ingham dans le forum Langage
    Réponses: 5
    Dernier message: 21/01/2003, 17h26

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