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

SQL Firebird Discussion :

Séparateur décimal utilisé sous Firebird


Sujet :

SQL Firebird

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut Séparateur décimal utilisé sous Firebird
    Bonjour,

    Sur une base Firebird 2.5, j'ai une table dont l'un des champs est un VARCHAR qui stocke des décimaux (je sais c'est pas top, mais la base est comme ça et je dois faire avec).
    J’ai prévus de faire un CAST du champs dans ma requête pour transformer ce champs en FLOAT. Mais bien sur le stockage des valeurs dans ce champs est dépendant de la configuration du séparateur décimal des options locales, et du cout j'ai une erreur de conversion.

    Est-ce que pour Firebird, le séparateur décimal est obligatoirement un point ?

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 046
    Points : 40 962
    Points
    40 962
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Citation Envoyé par r038tmp5 Voir le message
    Bonjour,

    Sur une base Firebird 2.5, j'ai une table dont l'un des champs est un VARCHAR qui stocke des décimaux (je sais c'est pas top, mais la base est comme ça et je dois faire avec).
    c'est effectivement loin d'être le top !
    Mais bien sur le stockage des valeurs dans ce champs est dépendant de la configuration du séparateur décimal des options locales, et du coup j'ai une erreur de conversion.
    voilà pourquoi stocker des décimaux dans un varchar n'est pas une bonne idée

    Est-ce que pour Firebird, le séparateur décimal est obligatoirement un point ?
    ici on parle d'affichage, le séparateur n'est pas stocké mais s'il s'agit d'un CAST , oui c'est le point qui est considéré comme le séparateur décimal

    Comment vous en sortir ? si avec de la chance vous n'avez pas de séparateur de milliers une conversion de la ',' en '.' peut suffire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT 
      CAST(REPLACE('123,45',',','.') AS NUMERIC(15,2)),
      CAST(REPLACE('3.14',',','.') AS NUMERIC(15,2)) 
     FROM RDB$DATABASE
    Donnera bien 123.45 et 3.14

    mais si vous tombez sur des formats exotiques du type "123,456" comment savoir s'il s'agit d'une virgule décimale ou d'une virgule séparateur de milliers ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut
    Je voulais confirmer que l'on ne peut pas configurer un séparateur de décimal comme sous Oracle par exemple.

    Du coup j'ai utilisé le code suivant dans ma requête, et je considère que je n'ai pas de séparateur de millier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CASE WHEN champs SIMILAR TO '[-]?[0-9]+[,]{1}[0-9]+'
            THEN CAST(REPLACE(champs, ',', '.') AS DECIMAL(18, 2))
            ELSE CAST(champs AS DECIMAL(18, 2)) END

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

Discussions similaires

  1. Connaitre le séparateur décimal utilisé
    Par Pienpien dans le forum MATLAB
    Réponses: 5
    Dernier message: 03/06/2011, 09h50
  2. [CR8.5][Oracle8] Séparateur décimal ignoré
    Par chrilie73 dans le forum SAP Crystal Reports
    Réponses: 9
    Dernier message: 06/06/2005, 18h31
  3. Problème avec la librairie rfunc sous Firebird
    Par yayelix dans le forum SQL
    Réponses: 4
    Dernier message: 17/05/2005, 16h49
  4. Fonction "CreateElement" avec style sous Firebird
    Par protos69 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 24/11/2004, 17h30
  5. [IBEasy] migration sous firebird depuis Interbase
    Par kase74 dans le forum InterBase
    Réponses: 14
    Dernier message: 23/06/2004, 15h56

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