Administração

CAST E CONVERT: Conversões Decimais De Alteração do SQL Server

Ao realizar cálculos simples dentro do SQL Server usando decimais, você pode observar o que pode parecer um comportamento estranho com o tipo de dados resultante. Em vez de retornar o formato decimal desejado, o SQL Server gera um formato decimal totalmente diferente. Nesta dica, veremos o problema e como resolver isso com o CAST e CONVERT.

Para resolver esse problema, você pode usar as funções CAST e CONVERT para garantir que esteja retornando o tipo de dados correto. Vou percorrer um exemplo do problema e como isso pode ser resolvido.

Solução: Funções CAST e CONVERT

O SQL Server fornece muitos tipos de dados diferentes para seu uso. Muitas pessoas que são novas no SQL Server podem não estar cientes de que, dependendo do código, podem ter conversões implícitas, resultando em resultados inesperados.

Por exemplo, o código a seguir é algo que você pode encontrar em um momento ou outro:

DECLARE @var1 decimal(18,2), @var2 decimal(18,2)<br>SET @var1 = 1234567891234567.87<br>SET @var2 = 222.13<br>SELECT @var1/@var2 as 'Resultado'

O resultado final deste código é o seguinte:

Resultado 
5557862023295.22293251699455273938

O resultado não é mais um tipo de dados decimal (18,2). Isso pode ou não ser um problema. Depende da natureza do aplicativo e do que acontece depois que o resultado é retornado.

No entanto, este é frequentemente o momento em que eu vou ouvir alguém comentar sobre como o SQL Server “não está funcionando certo” e apontar para o resultado e, em seguida, dizer ao DBA para “ir corrigir o problema”.

A verdade é que o MS SQL está funcionando exatamente como esperado, embora seja difícil encontrar a documentação para esse comportamento. Nesse caso específico, você deseja examinar a entrada do MSDN para “Precisão, escala e comprimento.”

Revisando os detalhes no documento mencionado acima, você descobrirá que o comportamento é exatamente o esperado.

No exemplo acima, estamos fazendo a divisão de dois tipos de dados decimais (18,2).

Em nosso exemplo, temos p1 e p2 = 18 e s1 e s2 = 2. Isso significa que a precisão para nosso resultado será a seguinte, com base na fórmula encontrada no artigo do MSDN mencionado acima:

p1 - ​​s1 + s2 + max (6, s1 + p2 + 1) = 18 - 2 + 2 + max (6, 2 + 18 + 1) = 18 + 21 = 39

No entanto, a precisão máxima permitida é 38.

Além disso, a escala para o nosso resultado será simplesmente:

max (6, s1 + p2 + 1) = max (6, 2 + 18 + 1) = 21

Como tivemos que reduzir nossa precisão em um de 39 para 38, também reduziremos nossa escala de 21 para 20. Portanto o tipo de dados para o resultado será decimal (38,20). Bem diferente do decimal (18,2) com o qual começamos.

Você pode evitar problemas como esse usando as funções CAST ou CONVERT dentro do MS SQL Server.

Então, qual usar? Minha preferência é usar CAST sempre que possível, pois o CONVERT é uma função específica do MS SQL Server.

Isso significa que, se você usar CAST, seu código será mais portátil (ou, em outras palavras, seu código funcionará em mais de uma plataforma). No entanto, CAST não pode ser usado para fins de formatação, para isso você precisará usar o CONVERT.

Em nosso exemplo, o código final que gostaríamos de ter é o seguinte:

DECLARE @var1 decimal(18,2), @var2 decimal(18,2)
SET @var1 = 1234567891234567.87
SET @var2 = 222.13
SELECT CAST(@var1/@var2 as decimal(18,2)) as 'Resultado'

Isso garantirá que tenhamos o tipo de dados desejado para o nosso resultado, que é:

Resultado
5557862023295.22

Por fim, verifique se você está obtendo o tipo de dados correto retornado ao executar conversões decimais e use CAST quando possível.

CAST E CONVERT: Conversões Decimais De Alteração do SQL Server
The following two tabs change content below.

Wesley Mota

DBA SQL Server
Profissional graduado em Banco de Dados e Sistemas de Informação com mais de 7 anos de experiência em empresas de software. Certificado MCSA Microsoft SQL Server possui intensa vivência em administração de banco de dados, Tunning, Performance SQL Server, levantamento de melhorias e monitoramento de banco de dados e servidores SQL Server. Consultoria SQL Server em diversos clientes no Brasil e ao redor do mundo. Escritor no blog dbasqlserverbr.com.br/blog. Onde compartilha conhecimento, experiências e dicas de performance para DBAs SQL Server. Conhecimentos em Oracle e ambientes de alta disponibilidade. Desenvolvimento de softwares web e mobile.Gerenciamento de equipe e projetos.

Latest posts by Wesley Mota (see all)

Wesley Mota

Profissional graduado em Banco de Dados e Sistemas de Informação com mais de 7 anos de experiência em empresas de software. Certificado MCSA Microsoft SQL Server possui intensa vivência em administração de banco de dados, Tunning, Performance SQL Server, levantamento de melhorias e monitoramento de banco de dados e servidores SQL Server. Consultoria SQL Server em diversos clientes no Brasil e ao redor do mundo. Escritor no blog dbasqlserverbr.com.br/blog. Onde compartilha conhecimento, experiências e dicas de performance para DBAs SQL Server. Conhecimentos em Oracle e ambientes de alta disponibilidade. Desenvolvimento de softwares web e mobile.Gerenciamento de equipe e projetos.

Share
Published by
Wesley Mota

Recent Posts

Free Blackjack No Download: Appreciate Blackjack Anytime, Anywhere

Blackjack, additionally known as twenty-one, is just one of one of the most popular gambling…

1 mês ago

The Ultimate Guide to Gry Online Ruletka

If you are a fan of online gambling, then you must have come across gry…

1 mês ago

Discover the Adventures of Free Spins at Online Casino Sites

On the internet online casinos have transformed the betting industry, enabling players to vegas.hu online…

8 meses ago

Best Free Spins No Deposit

Casinos online offer free spins to draw new customers. These bonuses are usually very profitable,…

8 meses ago

Ideal Online Port Gambling Enterprises: An Overview to Locating the Perfect Pc Gaming Experience

In recent times, online casino sites have actually obtained enormous appeal among gamers, providing a…

8 meses ago

Best Online Casinos That Accept Bitcoin Down Payments

Bitcoin, the most preferred cryptocurrency worldwide, has reinvented lots of industries, including the on baixar…

8 meses ago