2017-08-24 4 views
0

J'ai passé en revue une colonne de devise qui n'a aucun espace décimal. C'est une sortie d'un système hérité chargé dans notre base de données Oracle.Colonne de devise sans décimales: ajouter en décimal

Si le champ a trois chiffres ou plus, il doit avoir un nombre décimal à trois espaces à droite.

Si la valeur est inférieure à trois chiffres, elle doit avoir un nombre décimal et un zéro non significatif.

Par exemple:

  • 2050 doivent être converties en 2.050
  • 110 doivent être converties en 0,110
  • 50 doivent être converties en .050

J'ai essayé d'utiliser cast, mais j'ai reçu l'erreur 'type de données invalide.'

Il est une instruction select de base:

select 
    customer_id 
    cast(ENDING_BALANCE as (decimal(10,3)) as Bal_1 
    from Current_Balances 

Toutes les suggestions seraient appréciés.

+0

Vous avoir une parenthèse supplémentaire juste avant le mot décimal il semble. Essayez 'cast (ENDING_BALANCE comme décimal (10,3))' – scsimon

+0

Merci pour la capture @scsimon. Cette fois, il a couru, mais n'a pas ajouté dans la décimale. – Lyndey

+0

Quel est le type de données des entrées? Sont-ils NUMBER ou VARCHAR2? Et quel est le type de données souhaité du résultat - NUMBER ou VARCHAR2? – mathguy

Répondre

2

Je pense que vous devez jeter à un certain nombre et diviser par 1000

SELECT CAST(CAST('2050' as INT)/1000 as DECIMAL(10,3)) FROM DUAL 

Si vous voulez dire vraiment avoir le format de sortie ressemblant à cela, vous devez TO_CHAR il

SELECT LTRIM(TO_CHAR(CAST('2050' as INT)/1000, 'FM0.000'), '0') FROM DUAL