Categorias:

Funções de conversão

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:

TRY_TO_DECIMAL, TRY_TO_NUMBER, TRY_TO_NUMERIC

Sintaxe

TO_DECIMAL( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )

TO_NUMBER( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )

TO_NUMERIC( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
Copy

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
Copy
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 |
+---------+-----+-----------+-----------+
Copy