TEXT_TO_NUMERIC_ALT - Amazon Redshift

TEXT_TO_NUMERIC_ALT

TEXT_TO_NUMERIC_ALT executa uma operação de conversão no estilo Teradata para converter uma string de caracteres em um formato de dados numérico.

Sintaxe

TEXT_TO_NUMERIC_ALT (expression [, 'format'] [, precision, scale])

Argumentos

expressão

Uma expressão que avalia um ou mais valores CHAR ou VARCHAR, como um nome de coluna ou literal. A conversão de valores nulos retorna nulos. As cadeias em branco ou vazias são convertidas em 0.

format

Um literal de string que define o formato da expressão de entrada. Para obter mais informações, consulte Caracteres de formatação de estilo Teradata para dados numéricos.

precisão

O número de dígitos no resultado numérico. O padrão é 38.

escala

O número de dígitos à direita do separador decimal no resultado numérico. O padrão é 0.

Tipo de retorno

TEXT_TO_NUMERIC_ALT retorna um número DECIMAL.

O Amazon Redshift retorna um erro se a conversão para a frase de format que você especificar não for bem-sucedida.

O Amazon Redshift lança a string da expressão de entrada para o tipo numérico com a precisão mais alta que você especificar para esse tipo na opção precisão. Se o comprimento do valor numérico exceder o valor especificado para precisão, o Amazon Redshift arredonda o valor numérico de acordo com as seguintes regras:

  • Se o comprimento do resultado de conversão exceder o comprimento especificado na frase de format, o Amazon Redshift retorna um erro.

  • Se o resultado for convertido em um valor numérico, o resultado será arredondado para o valor mais próximo. Se a porção fracionada estiver exatamente a meio caminho entre o resultado de elenco superior e inferior, o resultado será arredondado para o valor par mais próximo.

Exemplos

O exemplo a seguir converte a string da expressão de entrada “1.5” para o valor numérico “2”. Como a declaração não especifica a escala, o padrão da escala é 0 e o resultado da conversão não inclui um resultado de fração. Como .5 está no meio do caminho entre 1 e 2, o resultado da conversão é arredondado para o valor par de 2.

select text_to_numeric_alt('1.5');
text_to_numeric_alt --------------------- 2

O exemplo a seguir converte a string da expressão de entrada '2.51' para o valor numérico 3. Como a declaração não especifica o valor da escala, o padrão da escala é 0 e o resultado da conversão não inclui um resultado de fração. Como 0,51 está mais próximo de 3 do que 2, o resultado da conversão é arredondado para o valor de 3.

select text_to_numeric_alt('2.51');
text_to_numeric_alt --------------------- 3

O exemplo a seguir converte a string da expressão de entrada 123.52501 com uma precisão de 10 e uma escala de 2 para o valor numérico 123,53.

select text_to_numeric_alt('123.52501', 10, 2);
text_to_numeric_alt --------------------- 123.53

O exemplo a seguir converte a string da expressão de entrada “123{“ com a frase de formato “999S” no numérico 1230. O caractere S indica um Decimal com zona assinada. Para ter mais informações, consulte Caracteres de formatação de estilo Teradata para dados numéricos.

select text_to_numeric_alt('123{', '999S');
text_to_int_alt ---------- 1230

O exemplo a seguir converte a string da expressão de entrada “USD123“ com a frase de formato “C9(I)” no numérico 124. Consulte Caracteres de formatação de estilo Teradata para dados numéricos.

select text_to_numeric_alt('USD123.9', 'C9(I)');
text_to_numeric_alt ---------- 124

O exemplo a seguir especifica uma coluna de tabela como a expressão de entrada.

select text_to_numeric_alt(a), text_to_numeric_alt(b) from t_text2numeric order by 1;
text_to_numeric_alt | text_to_numeric_alt -----------------------------------------+----------------------------------------- -99999999999999999999999999999999999999 | -99999999999999999999999999999999999999 -12300 | -12300 123 | 123 123 | 123 99999999999999999999999999999999999999 | 99999999999999999999999999999999999999

A seguir está a definição da tabela e a instrução de inserção para este exemplo.

create table t_text2numeric (a varchar(200), b char(200));
insert into t_text2numeric values ('123', '123'), ('+123.456', '+123.456'), ('-' || repeat('9', 38), '-' || repeat('9', 38)), (repeat('9', 38) || '+', repeat('9', 38) || '+'), ('-123E2', '-123E2');