[firebase-br] CAST - dúvida

eduardo eduardo em icontroller.com.br
Qua Jul 27 17:27:55 -03 2005


Oi Ricardo

O melhor seria você modificar a forma como você armazena estes numeros 
no BD, mas...

Se você souber que estes núemros não passarão de centenas ou milhares, 
por exemplo, você poderia fazer algo do tipo

CASE
    WHEN SUBSTRING(CAMPOVAR FROM 2 FOR 1) = ',' THEN /* ATÉ 9,.. */
         CAST(
              SUBSTRING(CAMPOVAR FROM 1 FOR 1)
              ||'.'||
              SUBSTRING(CAMPOVAR FROM 3 FOR 2) AS NUMERIC(8,2)
             )
    WHEN SUBSTRING(CAMPOVAR FROM 3 FOR 1) = ',' THEN /* ATÉ 99,.. */
         CAST(
              SUBSTRING(CAMPOVAR FROM 1 FOR 2)
              ||'.'||
              SUBSTRING(CAMPOVAR FROM 4 FOR 2) AS NUMERIC(8,2)
             )
    WHEN SUBSTRING(CAMPOVAR FROM 4 FOR 1) = ',' THEN /* ATÉ 999,.. */
         CAST(
              SUBSTRING(CAMPOVAR FROM 1 FOR 3)
              ||'.'||
              SUBSTRING(CAMPOVAR FROM 5 FOR 2) AS NUMERIC(8,2)
             )
    /*
       VÁ ATÉ O SEU LIMITE.
       SE VOCÊ UTILIZAR '.' COMO SEPARADOR DE MILHAR,
       VAI TER QUE ADAPTAR ESTA LÓGICA.
       VOCÊ TAMBÉM DEVE CONSIDERAR O CASO DE NÃO HAVER ','
       COMO EM NÚMEROS INTEIROS.
       Daqui para frente a Arte é sua... 	
    */
    ELSE
         CAST(0 AS NUMERIC(8,2))
    END AS CONVERTIDO

[]s Eduardo





Mais detalhes sobre a lista de discussão lista