Partilhar via


CAST e CONVERT (Transact-SQL)

Converte uma expressão de um tipo de dados em outro no SQL Server 2012.

Ícone de vínculo de tópico Convenções de sintaxe Transact-SQL

Sintaxe

Syntax for CAST:
CAST ( expression AS data_type [ ( length ) ] )

Syntax for CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Argumentos

  • expression
    É qualquer expressão válida.

  • data_type
    É o tipo de dados de destino. Isso inclui xml, bigint e sql_variant. Tipos de dados alias não podem ser usados.

  • length
    É um inteiro opcional que especifica o comprimento do tipo de dados de destino. O valor padrão é 30.

  • style
    É uma expressão de inteiro que especifica como a função CONVERT deve ser convertida para expression. Se o estilo for NULL, NULL será retornado. O intervalo é determinado por data_type. Para obter mais informações, consulte a seção Comentários.

Tipos de retorno

Retorna expression convertida em data_type.

Comentários

Estilos de data e hora

Quando expression é um tipo de dados de data ou hora, style pode ser um dos valores mostrados na tabela a seguir. Outros valores são processados como 0. A partir do SQL Server 2012, os únicos estilos que têm suporte ao serem convertidos de tipos de data e hora para datetimeoffset são 0 ou 1. Todos os outros estilos de conversão retornam erro 9809.

O SQL Server tem suporte para o formato de data em árabe usando o algoritmo kuwaitiano.

Sem século (aa) (1)

Com século (aaaa)

Standard

Entrada/Saída (3)

-

0 ou 100 (1, 2)

Padrão para datetime e smalldatetime

mês dd aaaa hh:miAM (ou PM)

1

101

EUA

1 = mm/dd/aa

101 = mm/dd/aaaa

2

102

ANSI

2 = aa.mm.dd

102 = aaaa.mm.dd

3

103

Britânico/francês

3 = dd/mm/aa

103 = dd/mm/aaaa

4

104

Alemão

4 = dd.mm.aa

104 = dd.mm.aaaa

5

105

Italiano

5 = dd-mm-aa

105 = dd-mm-aaaa

6

106 (1)

-

6 = dd mês aa

106 = dd mês aaaa

7

107 (1)

-

7 = Mês dd, aa

107 = Mês dd, aaaa

8

108

-

hh:mi:ss

-

9 ou 109 (1, 2)

Padrão + milissegundos

mês dd aaaa hh:mi:ss:mmmAM (ou PM)

10

110

EUA

10 = mm-dd-aa

110 = mm-dd-aaaa

11

111

JAPÃO

11 = aa/mm/dd

111 = aaaa/mm/dd

12

112

ISO

12 = aammdd

112 = aaaammdd

-

13 ou 113 (1, 2)

Padrão Europa + milissegundos

dd mês aaaa hh:mi:ss:mmm (24h)

14

114

-

hh:mi:ss:mmm(24h)

-

20 ou 120 (2)

ODBC canônico

aaaa-mm-dd hh:mi:ss(24h)

-

21 ou 121 (2)

ODBC canônico (com milissegundos) padrão para time, date, datetime2 e datetimeoffset

aaaa-mm-dd hh:mi:ss.mmm(24h)

-

126 (4)

ISO8601

aaaa-mm-ddThh:mi:ss.mmm (sem espaços)

ObservaçãoObservação

Quando o valor de milissegundos (mmm) for 0, o valor de milissegundos não será exibido. Por exemplo, o valor '2012-11-07T18:26:20.000 é exibido como '2012-11-07T18:26:20'.

-

127(6, 7)

ISO8601 com fuso horário Z.

aaaa-mm-ddThh:mi:ss.mmmZ (sem espaços)

ObservaçãoObservação

Quando o valor de milissegundos (mmm) for 0, o valor de milissegundos não será exibido. Por exemplo, o valor '2012-11-07T18:26:20.000 é exibido como '2012-11-07T18:26:20'.

-

130 (1, 2)

Islâmico (5)

dd mmm aaaa hh:mi:ss:mmmAM

Neste estilo, mon representa uma representação unicode Hijri de vários tokens do nome completo do mês. Este valor não será renderizado corretamente em uma instalação US padrão do SSMS.

-

131 (2)

Islâmico (5)

dd/mm/aaaa hh:mi:ss:mmmAM

1 Esses valores de estilo retornam resultados não determinísticos. Incluem todos os estilos (aa) (sem século) e um subconjunto de estilos (aaaa) (com século).

2 Os valores padrão (style 0 ou 100, 9 ou 109, 13 ou 113, 20 ou 120 e 21 ou 121) sempre retornam o século (aaaa).

3 Entrada quando você converte em datetime; saída quando você converte em dados de caracteres.

4 Criado para uso de XML. Para conversão de datetime ou smalldatetime em dados de caracteres, o formato de saída é conforme descrito na tabela anterior.

5 Hijri é um sistema de calendário com muitas variações. SQL Server usa o algoritmo kuwaitiano.

Observação importanteImportante

Por padrão, o SQL Server interpreta anos de dois dígitos com base em um ano de corte de 2049. Isto é, o ano 49 de dois dígitos é interpretado como 2049 e o ano 50 de dois dígitos é interpretado como 1950. Muitos aplicativos cliente, como aqueles que se baseiam na Automação, usam um ano de corte de 2030. O SQL Server fornece a opção de configuração two digit year cutoff que altera o ano de corte usado pelo SQL Server e permite o tratamento consistente de datas. É recomendável especificar anos de quatro dígitos.

6 Tem suporte apenas ao converter dados de caracteres em datetime ou smalldatetime. Quando dados de caracteres que representam apenas componentes de data ou de hora são convertidos em tipos de dados datetime ou smalldatetime, o componente de hora não especificado é definido como 00:00:00.000 e o componente de data não especificado é definido como 1900-01-01.

7O indicador de fuso horário opcional, Z, é usado para facilitar o mapeamento de valores datetime XML que têm informações de fuso horário em valores SQL Serverdatetime que não têm fuso horário. Z é o indicador de fuso horário UTC-0. Outros fusos horários são indicados com deslocamento de HH:MM na direção + ou -. Por exemplo: 2006-12-12T23:45:12-08:00.

Quando dados são convertidos de smalldatetime em caracteres, os estilos que incluem segundos ou milissegundos mostram zeros nessas posições. É possível truncar partes não desejadas da data ao converter de valores datetime ou smalldatetime usando um comprimento de tipo de dados char ou varchar apropriado.

Quando você converter datetimeoffset de dados de caracteres com um estilo que inclui uma hora, um deslocamento de fuso horário é anexado ao resultado.

Estilos float e real

Quando expression for float ou real, style poderá ser um dos valores mostrados na tabela a seguir. Outros valores são processados como 0.

Valor

Saída

0 (padrão)

Um máximo de 6 dígitos. Use em notação científica, quando apropriado.

1

Sempre 8 dígitos. Use sempre em notação científica.

2

Sempre 16 dígitos. Use sempre em notação científica.

126, 128, 129

Incluídos por razões de legado e poderia ser preterido em uma versão futura.

Estilos money e smallmoney

Quando expression for money ou smallmoney,style poderá ser um dos valores mostrados na tabela a seguir. Outros valores são processados como 0.

Valor

Saída

0 (padrão)

Nenhuma vírgula a cada três dígitos à esquerda do ponto decimal e dois dígitos à direita do ponto decimal. Por exemplo, 4235.98.

1

Vírgulas a cada três dígitos à esquerda do ponto decimal e dois dígitos à direita do ponto decimal. Por exemplo, 3,510.92.

2

Nenhuma vírgula a cada três dígitos à esquerda do ponto decimal e quatro dígitos à direita do ponto decimal. Por exemplo, 4235.9819.

126

Equivalente ao estilo 2 ao converter para char(n) ou varchar (n)

Estilos xml

Quando expression for xml, style poderá ser um dos valores mostrados na tabela a seguir. Outros valores são processados como 0.

Valor

Saída

0 (padrão)

Use comportamento de análise padrão que descarta espaço em branco insignificante e não permite um subconjunto de DTD interno.

ObservaçãoObservação

Ao converter em tipo de dados xml, o espaço em branco insignificante do SQL Server é tratado de maneira diferente no XML 1.0. Para obter mais informações, consulte Criar instâncias de dados XML.

1

Preserva espaço em branco insignificante. Essa configuração de estilo define o tratamento de xml:space padrão para se comportar da mesma forma como se xml:space="preserve" estivesse especificado.

2

Habilita o processamento de subconjunto de DTD interno limitado.

Se habilitado, o servidor poderá usar as seguintes informações fornecidas em um subconjunto de DTD interno para executar operações de análise de não validação.

  • Padrões de atributos são aplicados.

  • Referências a entidades internas são resolvidas e expandidas.

  • A exatidão sintática do modelo de conteúdo DTD será verificada.

O analisador ignorará subconjuntos de DTD externos. Ele também não avalia a declaração XML para verificar se o atributo standalone está definido como yes ou no, mas analisa a instância XML como se ela fosse um documento autônomo.

3

Preserva espaço em branco insignificante e habilita processamento de subconjunto de DTD interno limitado.

Estilos binários

Quando expression for binary(n), varbinary(n), char(n) ou varchar(n), style poderá ser um dos valores mostrados na tabela a seguir. Valores de estilo que não estão listados na tabela retornarão um erro.

Valor

Saída

0 (padrão)

Converte caracteres ASCII em bytes binários ou bytes binários em caracteres ASCII. Cada caractere ou byte é convertido 1:1.

Se o data_type for um tipo binário, o caracteres 0x serão adicionados à esquerda do resultado.

1, 2

Se o data_type for um tipo binário, a expressão deve ser uma expressão de caracteres. A expression deve ser composta por um número par de dígitos hexadecimais (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, a, b, c, d, e, f). Se o style for definido como 1, os caracteres 0x devem ser os primeiros dois caracteres na expressão. Se a expressão contiver um número de caracteres ímpar ou se algum dos caracteres for inválido, ocorrerá um erro.

Se o comprimento da expressão convertida for maior que o comprimento do resultado de data_type será truncado à direita.

data_types de comprimento fixo que são maiores que o resultado convertido terão zeros adicionados à direita do resultado.

Se o data_type for tipo de caractere, a expressão deve ser uma expressão de binária. Cada caractere binário é convertido em dois caracteres hexadecimais. Se o comprimento da expressão convertida for maior que o comprimento de data_type será truncado à direita.

Se o data_type for um tipo de caractere de tamanho fixo e o comprimento do resultado convertido for menor que o comprimento do data_type, espaços serão adicionados à direita da expressão convertida para manter um número par de dígitos hexadecimais.

Os caracteres 0x serão adicionados à esquerda do resultado convertido para style 1.

Conversões implícitas

Conversões implícitas são conversões que ocorrem sem especificar a função CAST ou CONVERT. Conversões explícitas são as conversões que exigem que CAST ou CONVERT sejam especificados. A ilustração a seguir mostra todas as conversões de tipos de dados explícitas e implícitas que são permitidas para tipos de dados fornecidos pelo sistema SQL Server. Os tipos incluem xml, bigint e sql_variant. Não há conversão implícita na atribuição do tipo de dados sql_variant, mas há conversão implícita em sql_variant.

DicaDica

Este gráfico está disponível como um arquivo PDF para download no Centro de Download da Microsoft.

Tabela de conversão de tipo de dados

Ao converter entre datetimeoffset e os tipos de caracteres char, varchar, nchar e nvarchar, a parte do deslocamento do fuso horário convertido sempre deve ter dois dígitos para HH e MM, por exemplo, -08:00.

ObservaçãoObservação

Como dados Unicode sempre usam um número par de bytes, tenha cuidado ao converter binary ou varbinary de ou para tipos de dados Unicode com suporte. Por exemplo, a conversão a seguir não retorna um valor hexadecimal de 41, retorna 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).

Tipos de dados de valor grande

Tipos de dados de valor grande exibem o mesmo comportamento de conversão implícita e explícita que suas contrapartes menores, principalmente os tipos de dados varchar, nvarchar e varbinary. Porém, você deve considerar as seguintes diretrizes:

  • Conversão de image em varbinary(max) e vice-versa é uma conversão implícita como também são as conversões entre text e varchar(max), e ntext e nvarchar(max).

  • Conversão de tipos de dados de valor grande, como varchar(max), em um tipo de dados de contraparte menor, como varchar, é uma conversão implícita, mas ocorrerá truncamento se o valor grande for grande demais para o comprimento especificado do tipo de dados menor.

  • A conversão de varchar, nvarchar ou varbinary em seus tipos de dados de valor grande correspondentes é executada implicitamente.

  • A conversão de tipo de dados sql_variant em tipos de dados do valor grande é uma conversão explícita.

  • Tipos de dados de valor grande não podem ser convertidos no tipo de dados sql_variant.

Para obter mais informações sobre como converter do tipo de dados xml, consulte Criar instâncias de dados XML.

Tipo de dados xml

Ao converter tipos de dados xml explícita ou implicitamente em um tipo de dados de cadeia de caracteres ou binário, o conteúdo do tipo de dados xml é serializado com base em um conjunto de regras. Para obter informações sobre essas regras, consulte Definir a serialização de dados XML. Para obter informações sobre como converter de outros tipos de dados no tipo de dados xml, consulte Criar instâncias de dados XML.

Tipos de dados de texto e de imagem

Não há suporte para a conversão automática de tipo de dados text e image. É possível converter explicitamente dados text em dados de caracteres e dados image em binary ou varbinary, mas o comprimento máximo é de 8000 bytes. Se você tentar uma conversão incorreta, como a conversão de uma expressão de caracteres que inclua letras em um int), o SQL Server exibirá uma mensagem de erro.

Agrupamento da saída

Quando a saída de CAST ou CONVERT for uma cadeia de caracteres e a entrada também for uma cadeia de caracteres, a saída terá o mesmo agrupamento e o mesmo rótulo de agrupamento que a entrada. Se a entrada não for uma cadeia de caracteres, a saída terá o agrupamento padrão do banco de dados e um rótulo de agrupamento de padrão coercível. Para obter mais informações, consulte Precedência de agrupamento (Transact-SQL).

Para atribuir um agrupamento diferente à saída, aplique a cláusula COLLATE à expressão do resultado da função CAST ou CONVERT. Por exemplo:

SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS

Truncando e arredondando resultados

Ao converter expressões de caracteres ou binários (char, nchar, nvarchar, varchar, binary ou varbinary) em uma expressão de um tipo de dados diferente, os dados podem ser truncados, exibidos apenas parcialmente ou um erro é retornado porque o resultado é curto demais para ser exibido. Conversões em char, varchar, nchar, nvarchar, binary e varbinary são trucadas, com exceção das conversões mostradas na tabela a seguir.

De tipo de dados

Em tipo de dados

Resultado

int, smallint ou tinyint

char

*

 

varchar

*

 

nchar

E

 

nvarchar

E

money, smallmoney, numeric, decimal, float ou real

char

E

 

varchar

E

 

nchar

E

 

nvarchar

E

* = O comprimento do resultado é curto demais para ser exibido. E = Um erro é retornado porque o comprimento de resultado é curto demais para ser exibido.

O SQL Server garante que apenas conversões de ida e volta, conversões que convertem um tipo de dados original e, em seguida, de volta para o tipo original, produzirão os mesmos valores de versão para versão. O exemplo a seguir mostra essa conversão de ida e volta:

DECLARE @myval decimal (5, 2);
SET @myval = 193.57;
SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5));
-- Or, using CONVERT
SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval));
ObservaçãoObservação

Não tente construir valores binary e depois convertê-los em um tipo de dados da categoria de tipo de dados numeric. O SQL Server não garante que o resultado de uma conversão de tipo de dados decimal ou numeric em binary será igual entre as versões do SQL Server.

O exemplo a seguir mostra uma expressão resultante que é muito pequena para ser exibida.

USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, SUBSTRING(p.Title, 1, 25) AS Title, CAST(e.SickLeaveHours AS char(1)) AS [Sick Leave]
FROM HumanResources.Employee e JOIN Person.Person p ON e.BusinessEntityID = p.BusinessEntityID
WHERE NOT e.BusinessEntityID >5;

Aqui está o conjunto de resultados.

FirstName   LastName      Title   Sick Leave

---------   ------------- ------- --------

Ken         Sanchez       NULL   *

Terri       Duffy         NULL   *

Roberto     Tamburello    NULL   *

Rob         Walters       NULL   *

Gail        Erickson      Ms.    *

(5 row(s) affected)

Ao converter tipos de dados que têm casas decimais diferentes, às vezes o valor resultante é truncado e em outras vezes ele é arredondado. A tabela a seguir mostra o comportamento.

De

Para

Comportamento

numeric

numeric

Round

numeric

int

Truncamento

numeric

money

Round

money

int

Round

money

numeric

Round

float

int

Truncamento

float

numeric

Round

Conversão de valores float que usam notação científica para decimal ou numeric é restrito a valores de precisão de 17 dígitos apenas. Qualquer valor com precisão mais alto que 17 rodadas para zero.

float

datetime

Round

datetime

int

Round

Por exemplo, o resultado da seguinte conversão é 10:

SELECT CAST(10.6496 AS int);

Ao converter tipos de dados em que o tipo de dados de destino tem menos casas decimais do que o tipo de dados de origem, o valor é arredondado. Por exemplo, o resultado da seguinte conversão é $10.3497:

SELECT CAST(10.3496847 AS money);

SQL Server retorna um mensagem de erro quando dados char, nchar, varchar ou nvarchar não numéricos são convertidos em int, float, numeric ou decimal. O SQL Server também retorna erro quando uma cadeia vazia (" ") é convertida para numeric ou decimal.

Determinadas conversões de datetime são não determinísticas no SQL Server 2005 e nas versões posteriores

No SQL Server 2000, conversões de cadeia de caracteres de data e hora são marcadas como deterministas. Porém, isso não é verdade para os estilos listados na tabela a seguir. Para estes estilos, as conversões dependem das configurações de idioma. O SQL Server 2005 e versões subsequentes marcam estas conversões como não determinísticas.

A tabela a seguir lista os estilos para os quais a conversão de cadeia de caracteres em datetime é não determinística.

Todos os estilos inferiores a 1001

106

107

109

113

130

1 Com exceção dos estilos 20 e 21

Caracteres suplementares (pares substitutos)

Desde o SQL Server 2012, se você usar agrupamentos de caracteres suplementares (SC), uma operação CAST de nchar ou nvarchar para um tipo nchar ou nvarchar de comprimento menor não truncará dentro de um par substituto; truncará antes do caractere suplementar. Por exemplo, o fragmento de código a seguir deixa @x que contém só 'ab'. Não há espaço suficiente para conter o caractere suplementar.

DECLARE @x NVARCHAR(10) = 'ab' + NCHAR(0x10000);
SELECT CAST (@x AS NVARCHAR(3));

Ao usar agrupamentos SC, o comportamento de CONVERT é análogo ao comportamento de CAST.

Suporte de compatibilidade

Nas versões anteriores do SQL Server, o estilo padrão de operações CAST e CONVERT nos tipos de dados time e datetime2 é 121, exceto quando um dos tipos é usado em uma expressão de coluna computada. Para colunas computadas, o estilo padrão é 0. Esse comportamento afeta as colunas computadas quando são criadas, usadas em consultas que envolvam parametrização automática ou usadas em definições de restrição.

No nível de compatibilidade 110, o estilo padrão das operações CAST e CONVERT nos tipos de dados time e datetime2 sempre é 121. Se a sua consulta depender do comportamento antigo, use um nível de compatibilidade inferior a 110 ou especifique explicitamente o estilo 0 na consulta afetada.

A atualização do banco de dados para o nível de compatibilidade 110 não alterará os dados de usuário que foram armazenados em disco. Você deve corrigir esses dados manualmente conforme apropriado. Por exemplo, se você usou SELECT INTO para criar uma tabela com base em uma fonte que continha uma expressão de coluna computada descrita acima, os dados (usando o estilo 0) serão armazenados, em vez da própria definição de coluna computada. Você precisará atualizar manualmente esses dados para que coincidam com o estilo 121.

Exemplos

A.Usando CAST e CONVERT

Cada exemplo recupera o nome dos produtos que têm um 3 no primeiro dígito de seu preço de lista e converte seu ListPrice em int.

-- Use CAST
USE AdventureWorks2012;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CAST(ListPrice AS int) LIKE '3%';
GO

-- Use CONVERT.
USE AdventureWorks2012;
GO
SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice
FROM Production.Product
WHERE CONVERT(int, ListPrice) LIKE '3%';
GO

B.Usando CAST com operadores aritméticos

O exemplo a seguir calcula uma única computação da coluna (Computed) dividindo as vendas totais acumuladas no ano (SalesYTD) pela porcentagem de comissão (CommissionPCT). Esse resultado é convertido em um tipo de dados int depois de ser arredondado para o número inteiro mais próximo.

USE AdventureWorks2012;
GO
SELECT CAST(ROUND(SalesYTD/CommissionPCT, 0) AS int) AS Computed
FROM Sales.SalesPerson 
WHERE CommissionPCT != 0;
GO

Aqui está o conjunto de resultados.

Computed

------

379753754

346698349

257144242

176493899

281101272

0

301872549

212623750

298948202

250784119

239246890

101664220

124511336

97688107

(14 row(s) affected)

C.Usando CAST para concatenar

O exemplo a seguir concatena expressões que não são caracteres nem binárias por meio de CAST.

USE AdventureWorks2012;
GO
SELECT 'The list price is ' + CAST(ListPrice AS varchar(12)) AS ListPrice
FROM Production.Product
WHERE ListPrice BETWEEN 350.00 AND 400.00;
GO

Aqui está o conjunto de resultados.

ListPrice

------------------

The list price is 357.06

The list price is 364.09

The list price is 364.09

The list price is 364.09

The list price is 364.09

(5 row(s) affected)

D.Usando CAST para produzir texto mais legível

O exemplo a seguir usa CAST na lista de seleção para converter a coluna Name em uma coluna char(10).

USE AdventureWorks2012;
GO
SELECT DISTINCT CAST(p.Name AS char(10)) AS Name, s.UnitPrice
FROM Sales.SalesOrderDetail AS s 
JOIN Production.Product AS p 
    ON s.ProductID = p.ProductID
WHERE Name LIKE 'Long-Sleeve Logo Jersey, M';
GO

Aqui está o conjunto de resultados.

Name       UnitPrice

---------- ---------------------

Long-Sleev 31.2437

Long-Sleev 32.4935

Long-Sleev 49.99

(3 row(s) affected)

E.Usando CAST com a cláusula LIKE

O exemplo a seguir converte a coluna money SalesYTD em uma int e, em seguida, em uma coluna char(20) de forma que ela possa ser usada com a cláusula LIKE.

USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, s.SalesYTD, s.BusinessEntityID
FROM Person.Person AS p 
JOIN Sales.SalesPerson AS s 
    ON p.BusinessEntityID = s.BusinessEntityID
WHERE CAST(CAST(s.SalesYTD AS int) AS char(20)) LIKE '2%';
GO

Aqui está o conjunto de resultados.

FirstName        LastName            SalesYTD         SalesPersonID

---------------- ------------------- ---------------- -------------

Tsvi             Reiter              2811012.7151      279

Syed             Abbas               219088.8836       288

Rachel           Valdez              2241204.0424      289

(3 row(s) affected)

F.Usando CONVERT ou CAST com XML com tipo

A seguir, veremos vários exemplos que mostram como usar CONVERT para converter em XML com tipo usando o Tipos e colunas de dados XML (SQL Server).

Este exemplo converte uma cadeia de caracteres com espaço em branco, texto e marcação em XML com tipo e remove todos os espaços em branco insignificantes (espaço em branco delimitador entre nós):

CONVERT(XML, '<root><child/></root>')

Este exemplo converte uma cadeia de caracteres semelhante com espaço em branco, texto e marcação em XML com tipo e preserva todos os espaços em branco insignificantes (espaço em branco delimitador entre nós):

CONVERT(XML, '<root>          <child/>         </root>', 1)

Este exemplo converte uma cadeia de caracteres com espaço branco, texto e marcação em XML com tipo:

CAST('<Name><FName>Carol</FName><LName>Elliot</LName></Name>'  AS XML)

Para obter mais exemplos, consulte Criar instâncias de dados XML.

G.Usando CAST e CONVERT com dados datetime

O exemplo a seguir exibe a data e a hora atuais, usa CAST para alterar a data e a hora atuais em um tipo de dados de caracteres e, em seguida, usa CONVERT para exibir a data e a hora no formato ISO 8901.

SELECT 
   GETDATE() AS UnconvertedDateTime,
   CAST(GETDATE() AS nvarchar(30)) AS UsingCast,
   CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601  ;
GO

Aqui está o conjunto de resultados.

UnconvertedDateTime     UsingCast                      UsingConvertTo_ISO8601

----------------------- ------------------------------ ------------------------------

2006-04-18 09:58:04.570 Apr 18 2006 9:58AM            2006-04-18T09:58:04.570

(1 row(s) affected)

O exemplo a seguir é aproximadamente o oposto do exemplo anterior. O exemplo exibe uma data e hora como dados de caracteres, usa CAST para alterar os dados de caracteres no tipo de dados datetime e, em seguida, usa CONVERT para alterar os dados de caracteres no tipo de dados datetime.

SELECT 
   '2006-04-25T15:50:59.997' AS UnconvertedText,
   CAST('2006-04-25T15:50:59.997' AS datetime) AS UsingCast,
   CONVERT(datetime, '2006-04-25T15:50:59.997', 126) AS UsingConvertFrom_ISO8601 ;
GO

Aqui está o conjunto de resultados.

UnconvertedText         UsingCast               UsingConvertFrom_ISO8601

----------------------- ----------------------- ------------------------

2006-04-25T15:50:59.997 2006-04-25 15:50:59.997 2006-04-25 15:50:59.997

(1 row(s) affected)

H.Usando CONVERT com dados binários e de caracteres

Os exemplos a seguir mostram os resultados da conversão de dados binários e de caractere usando estilos diferentes.

--Convert the binary value 0x4E616d65 to a character value.
SELECT CONVERT(char(8), 0x4E616d65, 0) AS [Style 0, binary to character];

Aqui está o conjunto de resultados.

Style 0, binary to character

----------------------------

Name

(1 row(s) affected)

--The following example shows how Style 1 can force the result
--to be truncated. The truncation is caused by
--including the characters 0x in the result.
SELECT CONVERT(char(8), 0x4E616d65, 1) AS [Style 1, binary to character];

Aqui está o conjunto de resultados.

Style 1, binary to character

------------------------------

0x4E616D

(1 row(s) affected)

--The following example shows that Style 2 does not truncate the
--result because the characters 0x are not included in
--the result.
SELECT CONVERT(char(8), 0x4E616d65, 2) AS [Style 2, binary to character];

Aqui está o conjunto de resultados.

Style 2, binary to character

------------------------------

4E616D65

(1 row(s) affected)

--Convert the character value 'Name' to a binary value.
SELECT CONVERT(binary(8), 'Name', 0) AS [Style 0, character to binary];

Aqui está o conjunto de resultados.

Style 0, character to binary

----------------------------------

0x4E616D6500000000

(1 row(s) affected)

SELECT CONVERT(binary(4), '0x4E616D65', 1) AS [Style 1, character to binary];

Aqui está o conjunto de resultados.

Style 1, character to binary

----------------------------------

0x4E616D65

(1 row(s) affected)

SELECT CONVERT(binary(4), '4E616D65', 2) AS [Style 2, character to binary];

Aqui está o conjunto de resultados.

Style 2, character to binary

----------------------------------

0x4E616D65

(1 row(s) affected)

I.Convertendo tipos de dados de data e hora

O exemplo a seguir demonstra a conversão de data, hora e tipos de dados de data e hora.

DECLARE @d1 date, @t1 time, @dt1 datetime;
SET @d1 = GETDATE();
SET @t1 = GETDATE();
SET @dt1 = GETDATE();
SET @d1 = GETDATE();
-- When converting date to datetime the minutes portion becomes zero.
SELECT @d1 AS [date], CAST (@d1 AS datetime) AS [date as datetime];
-- When converting time to datetime the date portion becomes zero 
-- which converts to January 1, 1900.
SELECT @t1 AS [time], CAST (@t1 AS datetime) AS [time as datetime];
-- When converting datetime to date or time non-applicable portion is dropped.
SELECT @dt1 AS [datetime], CAST (@dt1 AS date) AS [datetime as date], CAST (@dt1 AS time) AS [datetime as time];

Consulte também

Referência

SELECT (Transact-SQL)

Funções de sistema (Transact-SQL)

Conceitos

Conversão de tipo de dados (Mecanismo de Banco de Dados)

Gravar instruções Transact-SQL internacionais