[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