- Categorias:
TO_DECIMAL , TO_NUMBER , TO_NUMERIC¶
Converte uma expressão de entrada em um número de ponto fixo. Para a entrada NULL, a saída será NULL.
Estas funções são sinônimas.
- Consulte também:
Sintaxe¶
TO_DECIMAL( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
TO_NUMBER( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
TO_NUMERIC( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
Argumentos¶
Obrigatório:
expr
Uma expressão de um tipo numérico, de caractere ou variante.
Opcional:
format
O modelo de formato SQL usado para analisar a entrada
expr
e retornar. Para obter mais informações, consulte Modelos de formato SQL.precision
O número máximo de dígitos decimais no número resultante; de 1 a 38. No Snowflake, a precisão não é utilizada para determinar o número de bytes necessários para armazenar o número e não tem qualquer efeito sobre a eficiência, portanto o padrão é o máximo (38).
scale
O número de dígitos decimais fracionários (de 0 a
precision
- 1). 0 indica nenhum dígito fracionário (ou seja, um número inteiro). A escala padrão é 0.
Retornos¶
A função retorna NUMBER(precision, scale)
.
Se
precision
não for especificado, então o padrão é 38.Se
scale
não for especificado, então o padrão é 0.
Notas de uso¶
Para a entrada NULL, o resultado é NULL.
Para números de ponto fixo:
Números com escalas diferentes são convertidos adicionando zeros à direita (se a escala precisar ser aumentada) ou reduzindo o número de dígitos fracionários por arredondamento (se a escala precisar ser diminuída).
Observe que as conversões de números de ponto fixo em números de ponto fixo que aumentam a escala podem falhar.
Para números de ponto flutuante:
Os números são convertidos se estiverem dentro do intervalo representável, dada a escala.
A conversão entre números fracionários binários e decimais não é precisa. Isso pode resultar em perda de precisão ou erros fora da faixa.
Valores de infinidade e NaN (não números) resultam em erros de conversão.
As cadeias de caracteres são convertidas como números decimais, inteiros, fracionários ou de ponto flutuante.
Para entrada fracionária, a precisão é deduzida como o número de dígitos após o ponto.
Para entrada de ponto flutuante, a omissão da mantissa ou do expoente é permitida e é interpretada como 0. Assim,
E
é analisado como 0.
Para entrada VARIANT:
Se a variante contiver um ponto fixo ou um valor numérico de ponto flutuante, é realizada uma conversão numérica apropriada.
Se a variante contém uma cadeia de caracteres, é realizada uma conversão da cadeia de caracteres.
Se a variante contém um valor booleano, o resultado é 0 ou 1 (para falso e verdadeiro, correspondentemente).
Se a variante contiver um valor JSON
null
, a saída será NULL.
Exemplos¶
create or replace table number_conv(expr varchar);
insert into number_conv values ('12.3456'), ('98.76546');
select expr, to_number(expr), to_number(expr, 10, 1), to_number(expr, 10, 8) from number_conv;
+----------+-----------------+------------------------+------------------------+
| EXPR | TO_NUMBER(EXPR) | TO_NUMBER(EXPR, 10, 1) | TO_NUMBER(EXPR, 10, 8) |
|----------+-----------------+------------------------+------------------------|
| 12.3456 | 12 | 12.3 | 12.34560000 |
| 98.76546 | 99 | 98.8 | 98.76546000 |
+----------+-----------------+------------------------+------------------------+
select expr, to_number(expr, 10, 9) from number_conv;
100039 (22003): Numeric value '12.3456' is out of range
select column1,
to_decimal(column1, '99.9') as D0,
to_decimal(column1, '99.9', 9, 5) as D5,
to_decimal(column1, 'TM9', 9, 5) as TD5
from values ('1.0'), ('-12.3'), ('0.0'), (' - 0.1 ');
+---------+-----+-----------+-----------+
| COLUMN1 | D0 | D5 | TD5 |
|---------+-----+-----------+-----------|
| 1.0 | 1 | 1.00000 | 1.00000 |
| -12.3 | -12 | -12.30000 | -12.30000 |
| 0.0 | 0 | 0.00000 | 0.00000 |
| - 0.1 | 0 | -0.10000 | -0.10000 |
+---------+-----+-----------+-----------+