Trabalhar com tipos de dados

Concluído

As colunas e variáveis usadas no Transact-SQL têm um tipo de dados. O comportamento dos valores em expressões depende do tipo de dados da coluna ou variável que está sendo referenciada. Por exemplo, como você viu anteriormente, você pode usar o + operador para concatenar dois valores de cadeia de caracteres ou para adicionar dois valores numéricos.

A tabela a seguir mostra tipos de dados comuns com suporte em um banco de dados do SQL Server.

Numérico exato

Numérico aproximado

Caráter

Data/Hora

Binário

Outro

tinyint

flutuante

char

data

binário

Cursor

smallint

real

varchar

hora

Varbinary

Hierarquia

número inteiro

text

datetime

imagem

sql_variant

bigint

Nchar

datetime2

tabela

bit

Nvarchar

PequenoDateTime

carimbo de data/hora

decimal/numérico

ntexto

datetimeoffset

uniqueidentifier

numérico

xml

dinheiro

geografia

dinheiro pequeno

Geometria

Nota

Para obter mais detalhes sobre os diferentes tipos de dados e seus atributos, visite a documentação de referência do Transact-SQL.

Conversão do tipo de dados

Os valores de tipo de dados compatíveis podem ser convertidos implicitamente conforme necessário. Por exemplo, suponha que você possa usar o operador para adicionar um número inteiro a um número decimal ou para concatenar um valor char de comprimento fixo + e um valor varchar de comprimento variável. No entanto, em alguns casos, talvez seja necessário converter explicitamente valores de um tipo de dados para outro - por exemplo, tentar usar + para concatenar um valor varchar e um valor decimal resultará em um erro, a menos que você primeiro converta o valor numérico em um tipo de dados de cadeia de caracteres compatível.

Nota

Conversões implícitas e explícitas se aplicam a determinados tipos de dados, e algumas conversões não são possíveis. Para obter mais informações, use o gráfico na documentação de referência do Transact-SQL.

O T-SQL inclui funções para ajudá-lo a converter explicitamente entre tipos de dados

ELENCO e TRY_CAST

A função CAST converte um valor em um tipo de dados especificado se o valor for compatível com o tipo de dados de destino. Um erro será retornado se incompatível.

Por exemplo, a consulta a seguir usa CAST para converter os valores inteiros na coluna ProductID em valores varchar (com um máximo de 4 caracteres) para concatená-los com outro valor baseado em caracteres:

SELECT CAST(ProductID AS varchar(4)) + ': ' + Name AS ProductName
FROM Production.Product;

O resultado possível dessa consulta pode ser parecido com este:

ProductName

680: HL Road Frame - Preto, 58

706: HL Road Frame - Vermelho, 58

707: Capacete Sport-100, Vermelho

708: Capacete Sport-100, Preto

...

No entanto, vamos supor que a coluna Tamanho na tabela Production.Product seja uma coluna nvarchar (comprimento variável, dados de texto Unicode) que contém alguns tamanhos numéricos (como 58) e alguns tamanhos baseados em texto (como "S", "M" ou "L"). A consulta a seguir tenta converter valores dessa coluna em um tipo de dados inteiro :

SELECT CAST(Size AS integer) As NumericSize
FROM Production.Product;

Essa consulta resulta na seguinte mensagem de erro:

Erro: A conversão falhou ao converter o valor nvarchar 'M' para o tipo de dados int.

Dado que pelo menos alguns dos valores na coluna são numéricos, convém converter esses valores e ignorar os outros. Você pode usar a função TRY_CAST para converter tipos de dados.

SELECT TRY_CAST(Size AS integer) As NumericSize
FROM Production.Product;

Desta vez, os resultados podem ser assim:

NumericSize

58

58

NULL

NULL

...

Os valores que podem ser convertidos em um tipo de dados numéricos são retornados como valores decimais, e os valores incompatíveis são retornados como NULL, que é usado para indicar que um valor é desconhecido.

Nota

Exploraremos considerações para lidar com valores NULL mais adiante nesta unidade.

CONVERTER e TRY_CONVERT

CAST é a função SQL padrão ANSI para conversão entre tipos de dados e é usada em muitos sistemas de banco de dados. No Transact-SQL, você também pode usar a função CONVERT, conforme mostrado aqui:

SELECT CONVERT(varchar(4), ProductID) + ': ' + Name AS ProductName
FROM Production.Product;

Mais uma vez, essa consulta retorna o valor convertido para o tipo de dados especificado, da seguinte forma:

ProductName

680: HL Road Frame - Preto, 58

706: HL Road Frame - Vermelho, 58

707: Capacete Sport-100, Vermelho

708: Capacete Sport-100, Preto

...

Como CAST, CONVERT tem uma variante TRY_CONVERT que retorna NULL para valores incompatíveis.

Outro benefício de usar CONVERT over CAST é que CONVERT também inclui um parâmetro que permite especificar um estilo de formato ao converter valores numéricos e de data em strings. Por exemplo, considere a consulta seguinte:

SELECT SellStartDate,
       CONVERT(varchar(20), SellStartDate) AS StartDate,
       CONVERT(varchar(10), SellStartDate, 101) AS FormattedStartDate 
FROM SalesLT.Product;

Os resultados dessa consulta podem ter esta aparência:

SellStartDate

StartDate

FormattedStartDate

2002-06-01T00:00:00.0000000

1 jun 2002 12:00

6/1/2002

2002-06-01T00:00:00.0000000

1 jun 2002 12:00

6/1/2002

2005-07-01T00:00:00.0000000

1 de julho de 2005 12:00

01/07/2005

2005-07-01T00:00:00.0000000

1 de julho de 2005 12:00

01/07/2005

...

...

...

Nota

Para saber mais sobre códigos de formatação de estilo que você pode usar com CONVERT, consulte a documentação de referência do Transact-SQL.

ANÁLISE e TRY_PARSE

A função PARSE foi projetada para converter cadeias de caracteres formatadas que representam valores numéricos ou de data/hora. Por exemplo, considere a seguinte consulta (que usa valores literais em vez de valores de colunas em uma tabela):

SELECT PARSE('01/01/2021' AS date) AS DateValue,
   PARSE('$199.99' AS money) AS MoneyValue;

Os resultados desta consulta têm o seguinte aspeto:

DateValue

ValorDinheiro

2021-01-01T00:00:00.0000000

199.99

Da mesma forma que CAST e CONVERT, PARSE tem uma variante TRY_PARSE que retorna valores incompatíveis como NULL.

Nota

Ao trabalhar com tipos de dados decimais ou numéricos, pode ser necessário arredondar para um número inteiro ou definir o ponto decimal, o que pode ser obtido por meio de precisão e escala. Para entender melhor esse conceito de precisão e escala, consulte a documentação de referência do Transact-SQL.

STR

A função STR converte um valor numérico em um varchar.

Por exemplo:

SELECT ProductID,  '$' + STR(ListPrice) AS Price
FROM Production.Product;

Os resultados seriam mais ou menos assim:

ProductID

Preço

680

$1432,00

706

$1432,00

707

$35,00

...

...