Skip to content
Skip to content
Menu
Info Cafe
Info Cafe

SQLShack (Português)

By admin on Fevereiro 12, 2021

Este artigo é um esforço para discutir as funções SQL Cast e SQL Convert como seguimento de artigos anteriores, nos quais discutimos várias dicas SQL tais como SQL Date, SQL Coalesce, SQL Union, SQL Join, SQL Like, SQL String, SQL String, etc.

Por vezes precisamos de converter dados entre diferentes tipos de dados SQL. Para além de trabalhar com dados, existem algumas funções integradas que podem ser utilizadas para converter os dados. Portanto, vamos analisar mais de perto as funções de conversão SQL SQL CAST e SQL CONVERT em detalhe.

Introdução

Para realizar operações ou comparações ou transformação entre dados numa base de dados SQL Server, os tipos de dados SQL desses valores devem corresponder. Quando os tipos de dados SQL são diferentes, passarão por um processo chamado “type-casting”. A conversão dos tipos de dados SQL, neste processo, pode ser implícita ou explícita.

As funções de conversão de tipos de dados normalmente utilizadas especialmente para satisfazer os padrões de dados dos objectos ou sistemas alvo. Estamos no mundo a lidar com dados heterogéneos.

Nota: Uma passagem de conceitos de alto nível de gestão de dados é discutida neste artigo funções de string SQL para Data Munging (Wrangling).

Por vezes os tipos de dados precisam de ser convertidos para outros tipos de dados para cálculos ou transformação ou processos ou para satisfazer formatos de dados de destino. Por exemplo, quando multiplicamos dados do tipo decimal com um número inteiro, os dados passam por uma transformação interna e implicitamente convertem um número inteiro para um tipo de dados decimal e o resultado é de dados decimais.

Conversão SQL explícita

Quando lidamos com dois valores que são iguais na natureza mas diferentes tipos de dados, nos bastidores, o motor da base de dados converte os valores mais baixos dos tipos de dados para tipos de dados mais altos antes de poder avançar com o cálculo. Este tipo é conhecido como uma conversão implícita. Por outro lado, temos conversões explícitas em que se chama uma função SQL CAST ou SQL CONVERT para alterar o tipo de dados. Pode consultar a visão geral do formato de data SQL; função DateDiff SQL, função DateAdd SQL e mais artigos para exemplos.

Syntax:

CAST
CAST ( exp AS datatype )
CONVERT
CONVERT ( datatype , expressão )

1
2
3
4

exp
Define o argumento da expressão válida

datype
Esta dá os detalhes do tipo de dados alvo

len
Esta especifica o comprimento do tipo de dados alvo. Este é um parâmetro opcional por defeito, o valor do comprimento é definido para 30

estilo
É um valor inteiro utilizado com a função CONVERTA SQL para traduzir a expressão para a saída desejada

SQL Converter e Fundir tabela de conversão de dados

O seguinte tabela de conversão é uma folha de referência rápida para conversão do tipo de dados

SQL Converter e tabela de conversão de dados SQL Cast
Referência: https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017h3>Exemplo 1: SQL Conversão implícita com números

No exemplo seguinte, dois números aleatórios 5 e 212345 são adicionados e os resultados são exibidos.

1
2

DECLARE @a int=5, @b bigint=212345
SELECT @a, @b, @a+@b

Resultados de conversão implícita com números

Resultados de conversão implícita com números

Vemos que os dois valores são de tipos de dados diferentes, o motor da base de dados converteu implicitamente o valor int para um bigint antes de fazer a adição. E depois podia processar a operação de adição, uma vez que se tornavam o mesmo tipo de dados.

Exemplo 2: SQL Conversão implícita com caracteres

No exemplo seguinte, vamos adicionar dois tipos de dados de caracteres. Vamos criar variáveis @a tipo de dados de caracteres e atribuir um valor ‘5’ e @b com um valor ‘2’.

1
2

DECLARE @a char=’5′, @b char=’2′
SELECT @a, @b, @a+@b

Na saída, primeiro, obtemos os valores das variáveis ‘a’ e ‘b’, segundo e resultado do cálculo que são os dois valores juntos. Com os valores dos caracteres no lugar, o motor da base de dados decidiu implicitamente concatenar ambos os valores e mostrar 52 como resultado do cálculo.

Resultados de conversão implícita com caracteres

Exemplo 3: Como realizar uma conversão implícita usando SQL Cast

No exemplo seguinte, veremos como forçar a conversão de um tipo de dado para outro. Tomemos um exemplo acima e convertamos os valores de entrada para o tipo numérico e depois adicionemos esses valores.

1
2

DECLARE @a char=’5′, @b char=’2′
SELECT @a,@b, cast(@a as int)+ cast(@b as int)

A função SQL CAST leva dois argumentos. Primeiro, os dados que queremos processar, neste caso, os dados são ‘5’ e ‘2’ e são de campo char, e depois como os queremos processar, ou como os queremos CASTAR. Neste caso, pretende CASTAR como um campo inteiro.

Na saída, repara que os valores dos caracteres de entrada são convertidos e também acrescentados esses valores e o resultado é do tipo inteiro.

Explicar resultados de conversão usando SQL Cast

Exemplo 4: Tratamento avançado de erros usando TRY_CAST

No exemplo seguinte, vamos dissecar ainda mais os valores dos tipos de dados usando a função SQL cast e a função SQL try_cast.

No seguinte SQL, o valor da string ‘123’ é convertido em BIGINT. Foi capaz de converter devido à natureza dos dados. Vejamos o segundo exemplo, o valor da string ‘xyz’ é usado na expressão para a função SQL cast. Ao fazer isto, verá um erro indicando “Error Converting data type varchar to bigint”. Quando se está a fazer a análise de dados com várias fontes de dados, normalmente obtemos esse tipo de valores nos dados da fonte. Assim, para lidar com este tipo de cenários, pode usar a função SQL try_cast. Na terceira linha de SQL, passamos a string como um valor de entrada, após a execução, não recebemos um erro mas acabamos por obter um valor NULL como uma saída. O valor NULL pode ser ainda mais simplificado usando a função SQL ISNULL ou a função SQL coalesce.

Nota: Pode consultar o artigo Utilizando a função SQL Coalesce no SQL Server para mais informações.

1
2
3
4
5
6
7

SELECT TRY_CAST(‘123’ AS BIGINT);

GO
SELECT TRY_CAST(‘xyz’ AS BIGINT);
GO
SELECT TRY_CAST(‘xyz’ AS BIGINT);
GO
SELECT ISNULL(TRY_CAST(‘xyz’ AS BIGINT), 99);

Error handling results from using Try CastResultados do manuseamento do errror resultantes da utilização de Try Cast

Exemplo 5: Código de estilo explicado em funções de CONVERTIRTE

O exemplo seguinte converte o campo de data de contratação para diferentes estilos disponíveis da função de conversão SQL. A função SQL convert começa primeiro com um tipo de dados, e uma vírgula, e depois seguida por uma expressão. Com Datas, temos também um outro argumento que podemos fornecer, que se chama um código de estilo SQL. Pode obter uma lista destes no artigo CAST e na documentação técnica CONVERT (Transact-SQL).

SELECT hiredate,
CONVERT(CHAR(50), data de aluguer),
CONVERT(CHAR(50), data de contratação, 1) ‘S-1’,
CONVERT(CHAR(50), data de contratação, 101) ‘s-101’,
CONVERT(CHAR(50), data de contratação, 102) ‘s-102’,
CONVERT(CHAR(50), data de contratação, 101) ‘s-101’,

CONVERT(CHAR(50), data de contratação, 102) ‘s-102’,

data de aluguer, 103) ‘s-103’,

CONVERT(CHAR(50), data de aluguer, 104) ‘s-104’,
CONVERT(CHAR(50), data de aluguer, 105) ‘s-105’
DE RECURSOS HUMANOS.Empregado;
1
2
3
4
5
6
7
8
9

Vamos em frente executar o SQL acima mencionado. Agora podemos ver que as diferentes saídas estão a ser exibidas através da utilização de parâmetros de estilo dentro da função SQL converter. Podemos ver que o campo de data de contratação converte o campo de data em estilos diferentes.

Resultados da utilização da função de conversão SQL

Resultados da utilização da função de conversão SQL

Exemplo 6: As diferenças e semelhanças entre CAST e CONVERT

No exemplo seguinte, pode ver que o uso de CAST e CONVERT no seguinte T-SQL para comparar os tempos de execução.

Vamos executar o seguinte T-SQL para usar a função SQL CAST

1
2
3
4
5
6
7
8
9
10
11

SET STATISTICS TIME ON
WITH temp
AS (SELECT CAST(GETDATE() AS DATE) AS cast_date,
0 AS n
UNIÃO TODOS
SELECT CAST(GETDATE() + n AS DATE) AS cast_date,
n + 1
DE TEMPORADA
ONDE n < 1000000)
SELECT MAX(cast_date)
FROM temp OPTION(MAXRECURSION 0);

Diferenças e semelhanças entre SQL CONVERT e CAST

Diferenças e semelhanças entre SQL CONVERT e CAST

Agora, executar o mesmo T-SQL com a função SQL CONVERT no local.

1
2
3
4
5
6
7
8
9
10
11

SET STATISTICS TIME ON
WITH temp
AS (SELECT CONVERT(DATE, GETDATE(), 20) AS convert_date,
0 AS n
UNION ALL
SELECT CONVERT(DATE, GETDATE() + n, 20) AS convert_date,
n + 1
FROM temp
WHERE n < 1000000)
SELECT MAX(convert_date)
FROM temp OPTION(MAXRECURSION 0);

pontas rápidas:

  • CAST é puramente um padrão ANSI-SQL. Mas, CONVERT é uma função específica do SQL Server da mesma forma que temos de_char ou_date em Oracle
  • CAST está predominantemente disponível em todos os produtos de base de dados devido à sua portabilidade e facilidade de utilização
  • Não haverá uma grande diferença em termos de execução de consultas entre as funções SQL Cast e SQL Convert. Pode-se ver uma ligeira diferença nos tempos de execução devido à conversão interna de SQL CAST para a sua função nativa SQL CONVERT mas a função CONVERT vem com uma opção “Style-code” para derivar várias combinações de data e hora, decimais, e valores monetários. Em qualquer caso, a função SQL CONVERT funciona ligeiramente melhor que a função SQL CAST

Exemplo 7: Código de estilo no cálculo usando CONVERT

Neste exemplo, irá listar o campo de taxa da tabela “HumanResources.EmployeeHistory” da base de dados Adventureworks2016. A segunda coluna do SQL utiliza a função SQL CONVERT com o tipo de dados char(10) e os dados da taxa de expressão multiplicam-na por 1000.

O primeiro SQL, o código de estilo não é usado mas para o segundo e terceiro SQL, o código de estilo é definido para 1.

>

SELECT TOP 3 Rate,
CONVERT(CHAR(10), taxa * 1000) AS TextPrice
DE RECURSOS HUMANOS.EmployeePayHistory;
SELECT TOP 3 Rate,
CONVERT(CHAR(10), rate * 1000, 0) AS TextPrice
FROM HumanResources.EmployeePayHistory;
SELECT TOP 3 Rate,
CONVERT(CHAR(10), rate * 1000, 1) AS TextPrice
FROM HumanResources.EmployeePayHistory;

1
2
3
4
5
6
7
8
9

Na saída, podemos ver que a consulta com o código de estilo 1 retorna uma saída de texto com um separador de vírgulas na posição dos milhares. A consulta com o código de estilo 0 resulta na saída de texto sem separador de vírgulas.

Código de estilo no cálculo utilizando SQL CONVERT

Código de estilo no cálculo utilizando SQL CONVERT

Embrulho

Até agora, falámos sobre as funções SQL cast, SQL try_cast e SQL convert e como se pode converter entre strings, inteiros, e os valores de data e hora. Também analisámos a função SQL CONVERT com o código de estilo. Percorremos alguns exemplos das funções de conversão SQL implícitas e explícitas. E compreendemos a diferença entre as funções SQL CAST e SQL CONVERT. Também é utilizada uma expressão condicional com SQL ISNULL juntamente com a função try_cast SQL, e novamente, se eu tivesse feito isso sem utilizar a parte try, teria falhado em vez de devolver um valor. É assim que pode lançar valores, o que é bastante padrão, com este nível adicional, e também e erros mais graciosamente.

É tudo por agora… Espero que tenha gostado de ler este artigo. Sinta-se à vontade para comentar abaixo.

  • Autor
  • Posts recentes
Prashanth Jayaram
Sou um técnico de bases de dados com mais de 11 anos de riqueza, experiência prática em tecnologias de bases de dados. Sou Microsoft Certified Professional e tenho o apoio de um Mestrado em Aplicações Informáticas.
A minha especialidade reside na concepção & implementação de soluções de alta disponibilidade e migração de DB Migration multiplataforma. As tecnologias actualmente em funcionamento são SQL Server, PowerShell, Oracle e MongoDB.
Veja todos os posts de Prashanth Jayaram

Prashanth Jayaram
Latest posts de Prashanth Jayaram (ver todos)
ul>

  • Uma rápida visão geral da auditoria de bases de dados em SQL – 28 de Janeiro, 2021
  • Como configurar o Azure Data Sync entre as bases de dados Azure SQL e o SQL Server no local – 20 de Janeiro de 2021
  • Como executar operações de importação/exportação de bases de dados Azure SQL usando PowerShell – 14 de Janeiro de 2021
  • Navegação de artigos

    Chris Tamburello (Português)
    Adopt (Português)

    Deixe uma resposta Cancelar resposta

    O seu endereço de email não será publicado. Campos obrigatórios marcados com *

    Artigos recentes

    • Firebush (Português)
    • Previsão da taxa de CD para 2021: As taxas manter-se-ão provavelmente baixas, mas poderão aumentar mais tarde no ano
    • Como estruturar a documentação do sistema de gestão da qualidade
    • Dor pélvica crónica e prostatite: sintomas, diagnóstico e tratamento
    • Mixed Berry Crisp (Português)
    • Wheat Ales (Americana)
    • Os benefícios da amamentação após um ano
    • É seguro despejar café moído na pia | Canalização atómica
    • Cool-Down After Your Workout
    • Our Work

    Meta

    • Iniciar sessão
    • Feed de entradas
    • Feed de comentários
    • WordPress.org

    Arquivo

    • Março 2021
    • Fevereiro 2021
    • Janeiro 2021
    • Dezembro 2020
    • DeutschDeutsch
    • NederlandsNederlands
    • EspañolEspañol
    • FrançaisFrançais
    • PortuguêsPortuguês
    • ItalianoItaliano
    • PolskiPolski
    • 日本語日本語
    ©2021 Info Cafe | WordPress Theme by SuperbThemes.com