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> ] ] )

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(p,s), onde p é o precision e s é o 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.

  • Os números de pontos fixos com escala diferente são convertidos adicionando zeros à direita (ao aumentar a escala) ou reduzindo o número de dígitos fracionários por arredondamento. Note que as conversões fixo a fixo que aumentam a escala podem falhar.

  • Os números de ponto flutuante são convertidos se estiverem dentro da faixa representativa dada a escala; a conversão entre números binários e decimais fracionários não é precisa; isso pode resultar em perda de precisão ou erros fora da faixa. Infinidades e não números resultam em erro de conversão.

  • As cadeias de caracteres são convertidas como números inteiros decimais ou números fracionários.

  • 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 nulo JSON, 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 |
+---------+-----+-----------+-----------+