CAST e CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)

ESTE TÓPICO APLICA-SE A: simSQL Server (a partir de 2008)simBanco de Dados SQL do Microsoft AzuresimAzure SQL Data Warehouse simParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Essas funções convertem uma expressão de um tipo de dados em outro.These functions convert an expression of one data type to another.

Exemplo: alterar o tipo de dados de entradaExample: Change the input datatype

ConverterCast

SELECT 9.5 AS Original, CAST(9.5 AS int) AS int, 
    CAST(9.5 AS decimal(6,4)) AS decimal;

ConverterConvert


SELECT 9.5 AS Original, CONVERT(int, 9.5) AS int, 
    CONVERT(decimal(6,4), 9.5) AS decimal;

Aqui está o conjunto de resultados.Here is the result set.

OriginalOriginal INTint Decimaldecimal
9.59.5 99 9.50009.5000

Consulte os exemplos mais adiante neste tópico.See the examples later in this topic.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

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

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

ArgumentosArguments

expressãoexpression
Qualquer expression válida.Any valid expression.

data_typedata_type
O tipo de dados de destino.The target data type. Isso inclui xml, bigint, e sql_variant.This includes xml, bigint, and sql_variant. Tipos de dados alias não podem ser usados.Alias data types cannot be used.

lengthlength
Um inteiro opcional que especifica o tamanho do tipo de dados de destino.An optional integer that specifies the length of the target data type. O valor padrão é 30.The default value is 30.

stylestyle
Uma expressão de inteiro que especifica como a função CONVERT converterá expression.An integer expression that specifies how the CONVERT function will translate expression. Para um valor de estilo NULL, NULL é retornado.For a style value of NULL, NULL is returned. data_type determina o intervalo.data_type determines the range.

Tipos de retornoReturn types

Retorna a expression convertida em data_type.Returns expression, translated to data_type.

Estilos de data e horaDate and Time Styles

Para uma expression de tipo de dados de data ou hora, style pode ter um dos valores mostrados na tabela a seguir.For a date or time data type expression, style can have one of the values shown in the following table. Outros valores são processados como 0.Other values are processed as 0. A partir do SQL Server 2012 (11.x)SQL Server 2012 (11.x), os únicos estilos compatíveis, ao converter dos tipos de data e hora em datetimeoffset, são 0 ou 1.Beginning with SQL Server 2012 (11.x)SQL Server 2012 (11.x), the only styles supported, when converting from date and time types to datetimeoffset, are 0 or 1. Todos os outros estilos de conversão retornam erro 9809.All other conversion styles return error 9809.

Observação

O SQL ServerSQL Server dá suporte ao formato de data, em estilo árabe, com o algoritmo kuwaitiano. SQL ServerSQL Server supports the date format, in Arabic style, with the Kuwaiti algorithm.

Sem século (yy) (1)Without century (yy) (1) Com século (aaaa)With century (yyyy) StandardStandard Entrada/saída (3)Input/Output (3)
- 0 ou 100 (1,2)0 or 100 (1,2) Padrão para datetime e smalldatetimeDefault for datetime and smalldatetime mês dd aaaa hh:miAM (ou PM)mon dd yyyy hh:miAM (or PM)
11 101101 EUAU.S. 1 = mm/dd/aa1 = mm/dd/yy
101 = mm/dd/aaaa101 = mm/dd/yyyy
22 102102 ANSIANSI 2 = aa.mm.dd2 = yy.mm.dd
102 = aaaa.mm.dd102 = yyyy.mm.dd
33 103103 Britânico/francêsBritish/French 3 = dd/mm/aa3 = dd/mm/yy
103 = dd/mm/aaaa103 = dd/mm/yyyy
44 104104 GermanGerman 4 = dd.mm.aa4 = dd.mm.yy
104 = dd.mm.aaaa104 = dd.mm.yyyy
55 105105 ItalianoItalian 5 = dd-mm-aa5 = dd-mm-yy
105 = dd-mm-aaaa105 = dd-mm-yyyy
66 106 (1)106 (1) - 6 = dd mês aa6 = dd mon yy
106 = dd mês aaaa106 = dd mon yyyy
77 107 (1)107 (1) - 7 = Mês dd, aa7 = Mon dd, yy
107 = Mês dd, aaaa107 = Mon dd, yyyy
88 108108 - hh:mi:sshh:mi:ss
- 9 ou 109 (1,2)9 or 109 (1,2) Padrão + milissegundosDefault + milliseconds mês dd aaaa hh:mi:ss:mmmAM (ou PM)mon dd yyyy hh:mi:ss:mmmAM (or PM)
1010 110110 EUAUSA 10 = mm-dd-aa10 = mm-dd-yy
110 = mm-dd-aaaa110 = mm-dd-yyyy
1111 111111 JAPÃOJAPAN 11 = aa/mm/dd11 = yy/mm/dd
111 = aaaa/mm/dd111 = yyyy/mm/dd
1212 112112 ISOISO 12 = aammdd12 = yymmdd
112 = aaaammdd112 = yyyymmdd
- 13 ou 113 (1,2)13 or 113 (1,2) Padrão Europa + milissegundosEurope default + milliseconds dd mês aaaa hh:mi:ss:mmm (24h)dd mon yyyy hh:mi:ss:mmm(24h)
1414 114114 - hh:mi:ss:mmm(24h)hh:mi:ss:mmm(24h)
- 20 ou 120 (2)20 or 120 (2) ODBC canônicoODBC canonical aaaa-mm-dd hh:mi:ss(24h)yyyy-mm-dd hh:mi:ss(24h)
- 21 ou 121 (2)21 or 121 (2) ODBC canônico (com milissegundos) padrão para hora, data, datetime2 e datetimeoffsetODBC canonical (with milliseconds) default for time, date, datetime2, and datetimeoffset aaaa-mm-dd hh:mi:ss.mmm(24h)yyyy-mm-dd hh:mi:ss.mmm(24h)
- 126 (4)126 (4) ISO8601ISO8601 aaaa-mm-ddThh:mi:ss.mmm (sem espaços)yyyy-mm-ddThh:mi:ss.mmm (no spaces)

Observação: para um valor de milissegundos (mmm) igual a 0, o valor da fração decimal de milissegundo não será exibido.Note: For a milliseconds (mmm) value of 0, the millisecond decimal fraction value will not display. Por exemplo, o valor '2012-11-07T18:26:20.000 é exibido como '2012-11-07T18:26:20'.For example, the value '2012-11-07T18:26:20.000 displays as '2012-11-07T18:26:20'.
- 127(6, 7)127(6, 7) ISO8601 com fuso horário Z.ISO8601 with time zone Z. aaaa-mm-ddThh:mi:ss.mmmZ (sem espaços)yyyy-mm-ddThh:mi:ss.mmmZ (no spaces)

Observação: para um valor de milissegundos (mmm) igual a 0, o valor decimal de milissegundo não será exibido.Note: For a milliseconds (mmm) value of 0, the millisecond decimal value will not display. Por exemplo, o valor '2012-11-07T18:26:20.000 é exibido como '2012-11-07T18:26:20'.For example, the value '2012-11-07T18:26:20.000 will display as '2012-11-07T18:26:20'.
- 130 (1,2)130 (1,2) Islâmico (5)Hijri (5) dd mmm aaaa hh:mi:ss:mmmAMdd mon yyyy hh:mi:ss:mmmAM

Neste estilo, mon representa uma representação Unicode islâmico de vários tokens do nome completo do mês.In this style, mon represents a multi-token Hijri unicode representation of the full month name. Esse valor não é renderizado corretamente em uma instalação em inglês dos EUA padrão do SSMS.This value does not render correctly on a default US installation of SSMS.
- 131 (2)131 (2) Islâmico (5)Hijri (5) dd/mm/aaaa hh:mi:ss:mmmAMdd/mm/yyyy hh:mi:ss:mmmAM

1 Esses valores de estilo retornam resultados não determinísticos.1 These style values return nondeterministic results. Incluem todos os estilos (aa) (sem século) e um subconjunto de estilos (aaaa) (com século).Includes all (yy) (without century) styles and a subset of (yyyy) (with century) styles.

2 Os valores padrão (0 ou 100, 9 ou 109, 13 ou 113, 20 ou 120 e 21 ou 121) sempre retornam o século (yyyy).2 The default values (0 or 100, 9 or 109, 13 or 113, 20 or 120, and 21 or 121) always return the century (yyyy).

3 Entrada quando é feita a conversão em datetime; saída quando é feita a conversão em dados de caractere.3 Input when you convert to datetime; output when you convert to character data.

4 Criado para uso do XML.4 Designed for XML use. Para a conversão de datetime ou smalldatetime em dados de caractere, veja o formato de saída na tabela anterior.For conversion from datetime or smalldatetime to character data, see the previous table for the output format.

5 Islâmico é um sistema de calendário com diversas variações.5 Hijri is a calendar system with several variations. SQL ServerSQL Server usa o algoritmo kuwaitiano. uses the Kuwaiti algorithm.

Importante

Por padrão, o SQL ServerSQL Server interpreta anos de dois dígitos com base em um ano de corte de 2049.By default, SQL ServerSQL Server interprets two-digit years based on a cutoff year of 2049. Isso significa que o SQL Server interpreta o ano de dois dígitos 49 como 2049 e o ano de dois dígitos 50 como 1950.That means that SQL Server interprets the two-digit year 49 as 2049 and the two-digit year 50 as 1950. Muitos aplicativos cliente, como aqueles que se baseiam em objetos de Automação, usam um ano de corte de 2030.Many client applications, including those based on Automation objects, use a cutoff year of 2030. SQL ServerSQL Server fornece a opção de configuração de corte de ano de dois dígitos para alterar o ano de corte usado pelo SQL ServerSQL Server. provides the two digit year cutoff configuration option to change the cutoff year used by SQL ServerSQL Server. Isso permite o tratamento consistente de datas.This allows for the consistent treatment of dates. É recomendável especificar anos de quatro dígitos.We recommend specifying four-digit years.

6 Apenas compatível na conversão de dados de caractere em datetime ou smalldatetime.6 Only supported when casting from character data to datetime or smalldatetime. Ao converter dados de caractere que representam componentes apenas de data ou apenas de hora 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.When casting character data representing only date or only time components to the datetime or smalldatetime data types, the unspecified time component is set to 00:00:00.000, and the unspecified date component is set to 1900-01-01.

7 Use o indicador de fuso horário opcional Z para facilitar o mapeamento de valores datetime XML que contêm informações de fuso horário para valores datetime do SQL ServerSQL Server que não contêm fuso horário.7Use the optional time zone indicator Z to make it easier to map XML datetime values that have time zone information to SQL ServerSQL Server datetime values that have no time zone. Z indica o fuso horário UTC-0.Z indicates time zone UTC-0. O deslocamento de HH:MM, na direção + ou -, indica outros fusos horários.The HH:MM offset, in the + or - direction, indicates other time zones. Por exemplo: 2006-12-12T23:45:12-08:00.For example: 2006-12-12T23:45:12-08:00.

Ao converter smalldatetime em dados de caractere, os estilos que incluem segundos ou milissegundos mostram zeros nessas posições.When converting smalldatetime to character data, the styles that include seconds or milliseconds show zeros in these positions. Ao converter de valores datetime ou smalldatetime, use um tamanho de tipo de dados char ou varchar apropriado para truncar as partes de data indesejadas.When converting from datetime or smalldatetime values, use an appropriate char or varchar data type length to truncate unwanted date parts.

Ao converter dados de caractere em datetimeoffset, usando um estilo que inclui uma hora, um deslocamento de fuso horário é acrescentado ao resultado.When converting character data to datetimeoffset, using a style that includes a time, a time zone offset is appended to the result.

Estilos float e realfloat and real styles

Para uma expression de float ou real, style pode ter um dos valores mostrados na tabela a seguir.For a float or real expression, style can have one of the values shown in the following table. Outros valores são processados como 0.Other values are processed as 0.

ValorValue SaídaOutput
0 (padrão)0 (default) Um máximo de 6 dígitos.A maximum of 6 digits. Use em notação científica, quando apropriado.Use in scientific notation, when appropriate.
11 Sempre 8 dígitos.Always 8 digits. Use sempre em notação científica.Always use in scientific notation.
22 Sempre 16 dígitos.Always 16 digits. Use sempre em notação científica.Always use in scientific notation.
33 Sempre 17 dígitos.Always 17 digits. Use-o para a conversão sem perdas.Use for lossless conversion. Com esse estilo, cada valor float ou real distinto tem a garantia de ser convertido em uma cadeia de caracteres distinta.With this style, every distinct float or real value is guaranteed to convert to a distinct character string.

Aplica-se a: Banco de dados SQL do AzureAzure SQL Database e do SQL Server 2016 (13.x)SQL Server 2016 (13.x) em diante.Applies to: Banco de dados SQL do AzureAzure SQL Database, and starting in SQL Server 2016 (13.x)SQL Server 2016 (13.x).
126, 128, 129126, 128, 129 Incluído por razões herdadas; uma versão futura pode substituir esses valores.Included for legacy reasons; a future release could deprecate these values.

Estilos money e smallmoneymoney and smallmoney styles

Para uma expression de money ou smallmoney, style pode ter um dos valores mostrados na tabela a seguir.For a money or smallmoney expression, style can have one of the values shown in the following table. Outros valores são processados como 0.Other values are processed as 0.

ValorValue SaídaOutput
0 (padrão)0 (default) Nenhuma vírgula a cada três dígitos à esquerda do ponto decimal e dois dígitos à direita do ponto decimalNo commas every three digits to the left of the decimal point, and two digits to the right of the decimal point

Exemplo: 4235,98.Example: 4235.98.
11 Vírgulas a cada três dígitos à esquerda do ponto decimal e dois dígitos à direita do ponto decimalCommas every three digits to the left of the decimal point, and two digits to the right of the decimal point

Exemplo: 3.510,92.Example: 3,510.92.
22 Nenhuma vírgula a cada três dígitos à esquerda do ponto decimal e quatro dígitos à direita do ponto decimalNo commas every three digits to the left of the decimal point, and four digits to the right of the decimal point

Exemplo: 4.235,9819.Example: 4235.9819.
126126 Equivalente ao estilo 2, ao converter em char(n) ou varchar(n)Equivalent to style 2, when converting to char(n) or varchar(n)

Estilos xmlxml styles

Para uma expression xml, style pode ter um dos valores mostrados na tabela a seguir.For an xml expression, style can have one of the values shown in the following table. Outros valores são processados como 0.Other values are processed as 0.

ValorValue SaídaOutput
0 (padrão)0 (default) Use o comportamento de análise padrão que descarta o espaço em branco insignificante e não permite um subconjunto de DTD interno.Use default parsing behavior that discards insignificant white space, and does not allow for an internal DTD subset.

Observação: ao fazer a conversão no tipo de dados xml, o espaço em branco insignificante do SQL ServerSQL Server é tratado de maneira diferente do XML 1.0.Note: When converting to the xml data type, SQL ServerSQL Server insignificant white space is handled differently than in XML 1.0. Para obter mais informações, consulte Criar instâncias de dados XML.For more information, see Create Instances of XML Data.
11 Preserva espaço em branco insignificante.Preserve insignificant white space. Essa configuração de estilo define o tratamento padrão de xml:space para que ele corresponda ao comportamento de xml:space="preserve".This style setting sets the default xml:space handling to match the behavior of xml:space="preserve".
22 Habilita o processamento de subconjunto de DTD interno limitado.Enable limited internal DTD subset processing.

Se for habilitado, o servidor poderá usar as informações a seguir fornecidas em um subconjunto de DTD interno, para executar operações de análise de não validação.If enabled, the server can use the following information that is provided in an internal DTD subset, to perform nonvalidating parse operations.

- Os padrões de atributos são aplicados- Defaults for attributes are applied
- As referências a entidades internas são resolvidas e expandidas- Internal entity references are resolved and expanded
- A correção sintática do modelo de conteúdo DTD é verificada- The DTD content model is checked for syntactical correctness

O analisador ignora subconjuntos de DTD externos.The parser ignores external DTD subsets. Além disso, ele não avalia a declaração XML para ver se o atributo standalone tem um valor sim ou não.Also, it does not evaluate the XML declaration to see whether the standalone attribute has a yes or no value. Em vez disso, ele analisa a instância XML como um documento autônomo.Instead, it parses the XML instance as a stand-alone document.
33 Preserva o espaço em branco insignificante e habilita o processamento de subconjunto de DTD interno limitado.Preserve insignificant white space, and enable limited internal DTD subset processing.

Estilos bináriosBinary styles

Para uma expression de binary(n), char(n), varchar(n) ou varbinary(n), style pode ter um dos valores mostrados na tabela a seguir.For a binary(n), char(n), varbinary(n), or varchar(n) expression, style can have one of the values shown in the following table. Os valores de estilo que não estão listados na tabela retornarão um erro.Style values not listed in the table will return an error.

ValorValue SaídaOutput
0 (padrão)0 (default) Converte caracteres ASCII em bytes binários ou bytes binários em caracteres ASCII.Translates ASCII characters to binary bytes, or binary bytes to ASCII characters. Cada caractere ou byte é convertido 1:1.Each character or byte is converted 1:1.

Para um data_type binário, os caracteres 0x são adicionados à esquerda do resultado.For a binary data_type, the characters 0x are added to the left of the result.
1, 21, 2 Para um data_type binário, a expressão deve ser uma expressão de caracteres.For a binary data_type, the expression must be a character expression. A expression deve ter 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).The expression must have an even number of hexadecimal digits (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, ele deverá ter 0x como os dois primeiros caracteres.If the style is set to 1, the must have 0x as the first two characters. Se a expressão contiver um número ímpar de caracteres ou se um dos caracteres for inválido, um erro será gerado.If the expression contains an odd number of characters, or if any of the characters is invalid, an error is raised.

Se o tamanho da expressão convertida for maior que o tamanho do data_type, o resultado será truncado à direita.If the length of the converted expression exceeds the length of the data_type, the result is right truncated.

data_types de comprimento fixo maiores que o resultado convertido têm zeros adicionados à direita do resultado.Fixed length data_types larger than the converted result have zeros added to the right of the result.

Um data_type do tipo caractere exige uma expressão binária.A data_type of type character requires a binary expression. Cada caractere binário é convertido em dois caracteres hexadecimais.Each binary character is converted into two hexadecimal characters. Se o tamanho da expressão convertida exceder o tamanho do data_type, ela será truncada à direita.If the length of the converted expression exceeds the length of the data_type, it will be right truncated.

Para um data_type de tipo de caractere de tamanho fixo, se o tamanho do resultado convertido for menor que o tamanho do data_type, serão adicionados espaços à direita da expressão convertida, para manter um número par de dígitos hexadecimais.For a fixed size character type data_type, if the length of the converted result is less than its length of the data_type, spaces are added to the right of the converted expression, to maintain an even number of hexadecimal digits.

Os caracteres 0x serão adicionados à esquerda do resultado convertido para style 1.The characters 0x will be added to the left of the converted result for style 1.

Conversões implícitasImplicit conversions

Conversões implícitas não exigem a especificação da função CAST nem a função CONVERT.Implicit conversions do not require specification of either the CAST function or the CONVERT function. Conversões explícitas exigem a especificação da função CAST ou da função CONVERT.Explicit conversions require specification of the CAST function or the CONVERT function. A ilustração a seguir mostra todas as conversões de tipo de dados explícitas e implícitas permitidas para tipos de dados fornecidos pelo sistema SQL ServerSQL Server.The following illustration shows all explicit and implicit data type conversions allowed for SQL ServerSQL Server system-supplied data types. Isso inclui bigint, sql_variant e xml.These include bigint, and sql_variant, and xml. Não há nenhuma conversão implícita na atribuição do tipo de dados sql_variant, mas há uma conversão implícita em sql_variant.There is no implicit conversion on assignment from the sql_variant data type, but there is implicit conversion to sql_variant.

Dica

O Centro de Download da Microsoft tem esse gráfico disponível para download como um arquivo PDF.The Microsoft Download Center has this chart available for download as a PDF file.

Tabela de conversão de tipo de dadosData type conversion table

Ao converter entre datetimeoffset e os tipos de caractere char, nchar, nvarchar e varchar, a parte do deslocamento de fuso horário convertido sempre deve ter dois dígitos para HH e MM.When you convert between datetimeoffset and the character types char, nchar, nvarchar, and varchar, the converted time zone offset part should always have double digits for both HH and MM. Por exemplo, -08:00.For example, -08:00.

Observação

Como os dados Unicode sempre usam um número par de bytes, tenha cuidado ao converter binary ou varbinary bidirecionalmente em tipos de dados Unicode compatíveis.Because Unicode data always uses an even number of bytes, use caution when you convert binary or varbinary to or from Unicode supported data types. Por exemplo, a conversão a seguir não retorna um valor hexadecimal igual a 41.For example, the following conversion does not return a hexadecimal value of 41. Retorna um valor hexadecimal igual a 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).It returns a hexadecimal value of 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).

Tipos de dados de valor grandeLarge-value data types

Tipos de dados de valor grande têm o mesmo comportamento de conversão implícita e explícita de seus equivalentes menores, escpecificamente, os tipos de dados varchar, nvarchar e varbinary.Large-value data types have the same implicit and explicit conversion behavior as their smaller counterparts - specifically, the nvarchar, varbinary, and varchar data types. No entanto, considere as seguintes diretrizes:However, consider the following guidelines:

  • A conversão de image em varbinary(max) e vice-versa opera como uma conversão implícita, assim como as conversões entre text e varchar(max) e ntext e nvarchar(max).Conversion from image to varbinary(max), and vice-versa, operates as an implicit conversion, as do conversions between text and varchar(max), and ntext and nvarchar(max).
  • A conversão de tipos de dados de valor grande, como varchar(max), em um tipo de dados equivalente menor, como varchar, é uma conversão implícita, mas ocorrerá um truncamento se o tamanho do valor grande exceder o tamanho especificado do tipo de dados menor.Conversion from large-value data types, such as varchar(max), to a smaller counterpart data type, such as varchar, is an implicit conversion, but truncation occurs if the size of the large value exceeds the specified length of the smaller data type.
  • A conversão de nvarchar, varbinary ou varchar em seus tipos de dados de valor grande correspondentes ocorre implicitamente.Conversion from nvarchar, varbinary, or varchar to their corresponding large-value data types happens implicitly.
  • A conversão de tipo de dados sql_variant em tipos de dados de valor grande é uma conversão explícita.Conversion from the sql_variant data type to the large-value data types is an explicit conversion.
  • Tipos de dados de valor grande não podem ser convertidos no tipo de dados sql_variant.Large-value data types cannot be converted to the sql_variant data type.

Para obter mais informações sobre a conversão do tipo de dados xml, consulte Criar instâncias de dados XML.For more information about conversion from the xml data type, see Create Instances of XML Data.

tipo de dados xmlxml data type

Ao converter o tipo de dados xml explícita ou implicitamente em um tipo de dados de cadeia de caracteres ou binários, o conteúdo do tipo de dados xml é serializado de acordo com um conjunto de regras definido.When you explicitly or implicitly cast the xml data type to a string or binary data type, the content of the xml data type is serialized based on a defined set of rules. Para obter informações sobre essas regras, consulte Definir a serialização de dados XML.For information about these rules, see Define the Serialization of XML Data. Para obter informações sobre como converter de outros tipos de dados no tipo de dados xml, consulte Criar instâncias de dados XML.For information about conversion from other data types to the xml data type, see Create Instances of XML Data.

Tipos de dados text e imagetext and image data types

Os tipos de dados text e image não dão suporte a conversão automática de tipo de dados.The text and image data types do not support automatic data type conversion. Você pode converter explicitamente os dados text em dados de caractere, e os dados image em binary ou varbinary, mas o tamanho máximo é de 8.000 bytes.You can explicitly convert text data to character data, and image data to binary or varbinary, but the maximum length is 8000 bytes. Se você tentar uma conversão incorreta, por exemplo, tentar a conversão de uma expressão de caractere que inclui letras em um int, o SQL ServerSQL Server retornará uma mensagem de erro.If you try an incorrect conversion, for example trying to convert a character expression that includes letters to an int, SQL ServerSQL Server returns an error message.

Agrupamento da saídaOutput Collation

Quando as funções CAST ou CONVERT produzem uma cadeia de caracteres e elas recebem uma entrada de cadeia de caracteres, a saída tem o mesmo agrupamento e o mesmo rótulo de agrupamento da entrada.When the CAST or CONVERT functions output a character string, and they receive a character string input, the output has the same collation and collation label as the input. 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.If the input is not a character string, the output has the default collation of the database, and a collation label of coercible-default. Para obter mais informações, consulte Precedência de agrupamento (Transact-SQL).For more information, see Collation Precedence (Transact-SQL).

Para atribuir um agrupamento diferente à saída, aplique a cláusula COLLATE à expressão do resultado da função CAST ou CONVERT.To assign a different collation to the output, apply the COLLATE clause to the result expression of the CAST or CONVERT function. Por exemplo:For example:

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

Truncando e arredondando resultadosTruncating and rounding results

Ao converter expressões de caractere ou binárias (binary, char, nchar, nvarchar, varbinary ou varchar) em uma expressão de um tipo de dados diferente, a operação de conversão pode truncar os dados de saída, apenas parcialmente exibir os dados de saída ou retornar um erro.When converting character or binary expressions (binary, char, nchar, nvarchar, varbinary, or varchar) to an expression of a different data type, the conversion operation could truncate the output data, only partially display the output data, or return an error. Esses casos ocorrerão se o resultado for curto demais para ser exibido.These cases will occur if the result is too short to display. As conversões em binary, char, nchar, nvarchar, varbinary ou varchar são truncadas, com exceção das conversões mostradas na tabela a seguir.Conversions to binary, char, nchar, nvarchar, varbinary, or varchar are truncated, except for the conversions shown in the following table.

De tipo de dadosFrom data type Em tipo de dadosTo data type ResultadoResult
int, smallint ou tinyintint, smallint, or tinyint charchar *
varcharvarchar *
ncharnchar EE
nvarcharnvarchar EE
money, smallmoney, numeric, decimal, float ou realmoney, smallmoney, numeric, decimal, float, or real charchar EE
varcharvarchar EE
ncharnchar EE
nvarcharnvarchar EE

* = O tamanho do resultado é curto demais para ser exibido* = Result length too short to display

E = Um erro é retornado porque o comprimento de resultado é curto demais para ser exibido.E = Error returned because result length is too short to display.

O SQL ServerSQL Server garante que apenas conversões de ida e volta, em outras palavras, conversões que convertem um tipo de dados original e, em seguida, novamente no tipo de dados original, geram os mesmos valores de versão para versão. SQL ServerSQL Server guarantees that only roundtrip conversions, in other words conversions that convert a data type from its original data type and back again, yield the same values from version to version. O exemplo a seguir mostra essa conversão de ida e volta:The following example shows such a roundtrip conversion:

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ção

Não construa valores binary e depois converta-os em um tipo de dados da categoria de tipo de dados numéricos.Do not construct binary values, and then convert them to a data type of the numeric data type category. O SQL ServerSQL 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 ServerSQL Server. SQL ServerSQL Server does not guarantee that the result of a decimal or numeric data type conversion, to binary, will be the same between versions of SQL ServerSQL Server.

O exemplo a seguir mostra uma expressão resultante que é muito pequena para ser exibida.The following example shows a resulting expression that is too small to display.

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.Here is the result set.

FirstName   LastName      Title   Sick Leave
---------   ------------- ------- --------`
Ken         Sanchez       NULL   *
Terri       Duffy         NULL   *
Roberto     Tamburello    NULL   *
Rob         Walters       NULL   *
Gail        Erickson      Ms.    *
(5 row(s) affected)  

Quando você converter tipos de dados que têm casas decimais diferentes, às vezes, o SQL Server retornará um valor de resultado truncado e, em outros momentos, retornará um valor arredondado.When you convert data types that differ in decimal places, SQL Server will sometimes return a truncated result value, and at other times it will return a rounded value. Esta tabela mostra o comportamento.This table shows the behavior.

DeFrom ParaTo ComportamentoBehavior
numericnumeric numericnumeric ArredondamentoRound
numericnumeric intint TruncarTruncate
numericnumeric moneymoney ArredondamentoRound
moneymoney intint ArredondamentoRound
moneymoney numericnumeric ArredondamentoRound
floatfloat intint TruncarTruncate
floatfloat numericnumeric ArredondamentoRound

A conversão de valores float que usam notação científica para decimal ou numeric é restrita a valores de precisão de 17 dígitos apenas.Conversion of float values that use scientific notation to decimal or numeric is restricted to values of precision 17 digits only. Qualquer valor com precisão mais alto que 17 rodadas para zero.Any value with precision higher than 17 rounds to zero.
floatfloat datetimedatetime ArredondamentoRound
datetimedatetime intint ArredondamentoRound

Por exemplo, os valores 10,6496 e -10,6496 podem ser truncados ou arredondados durante a conversão em tipos int ou numeric:For example, the values 10.6496 and -10.6496 may be truncated or rounded during conversion to int or numeric types:

SELECT  CAST(10.6496 AS int) as trunc1,
         CAST(-10.6496 AS int) as trunc2,
         CAST(10.6496 AS numeric) as round1,
         CAST(-10.6496 AS numeric) as round2;

Os resultados da consulta são mostrados na seguinte tabela:Results of the query are shown in the following table:

trunc1trunc1 trunc2trunc2 round1round1 round2round2
1010 -10-10 1111 -11-11

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.When converting data types where the target data type has fewer decimal places than the source data type, the value is rounded. Por exemplo, esta conversão retorna $10.3497:For example, this conversion returns $10.3497:

SELECT CAST(10.3496847 AS money);

SQL ServerSQL Server retorna uma mensagem de erro ao converter dados não numéricos char, nchar, nvarchar ou varchar em decimal, float, int, numeric. returns an error message when converting nonnumeric char, nchar, nvarchar, or varchar data to decimal, float, int, numeric. O SQL ServerSQL Server também retorna erro quando uma cadeia de caracteres vazia (" ") é convertida em numeric ou decimal. SQL ServerSQL Server also returns an error when an empty string (" ") is converted to numeric or decimal.

Algumas conversões de datetime não são determinísticasCertain datetime conversions are nondeterministic

A tabela a seguir lista os estilos para os quais a conversão de cadeia de caracteres em datetime é não determinística.The following table lists the styles for which the string-to-datetime conversion is nondeterministic.

Todos os estilos inferiores a 1001All styles below 1001 106106
107107 109109
113113 130130

1 Com exceção dos estilos 20 e 211 With the exception of styles 20 and 21

Caracteres suplementares (pares alternativos)Supplementary characters (surrogate pairs)

Começando com SQL Server 2012 (11.x)SQL Server 2012 (11.x), ao usar agrupamentos SC (caracteres suplementares), uma operação CAST de nchar ou nvarchar em um tipo nchar ou nvarchar de tamanho menor não será truncada dentro de um par alternativo.Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x), when using supplementary character (SC) collations, a CAST operation from nchar or nvarchar to an nchar or nvarchar type of smaller length will not truncate inside a surrogate pair. Em vez disso, a operação é truncada antes do caractere suplementar.Instead, the operation truncates before the supplementary character. Por exemplo, o fragmento de código a seguir deixa @x que contém só 'ab'.For example, the following code fragment leaves @x holding just 'ab'. Não há espaço suficiente para conter o caractere suplementar.There is not enough space to hold the supplementary character.

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.When using SC collations, the behavior of CONVERT, is analogous to that of CAST.

Suporte de compatibilidadeCompatibility support

Nas versões anteriores do SQL ServerSQL Server, o estilo padrão das 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.In earlier versions of SQL ServerSQL Server, the default style for CAST and CONVERT operations on time and datetime2 data types is 121, except when either type is used in a computed column expression. Para colunas computadas, o estilo padrão é 0.For computed columns, the default style is 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.This behavior impacts computed columns when they are created, used in queries involving auto-parameterization, or used in constraint definitions.

No nível de compatibilidade 110 e superior, as operações CAST e CONVERT nos tipos de dados time e datetime2 sempre têm 121 como o estilo padrão.Under compatibility level 110 and higher, the CAST and CONVERT operations on the time and datetime2 datatypes always have 121 as the default style. Se uma consulta depender do comportamento antigo, use um nível de compatibilidade inferior a 110 ou especifique explicitamente o estilo 0 na consulta afetada.If a query relies on the old behavior, use a compatibility level less than 110, or explicitly specify the 0 style in the affected query.

A atualização do banco de dados para o nível de compatibilidade 110 e superior não alterará os dados de usuário que foram armazenados em disco.Upgrading the database to compatibility level 110 and higher will not change user data that has been stored to disk. Você deve corrigir esses dados manualmente conforme apropriado.You must manually correct this data as appropriate. Por exemplo, se você usar SELECT INTO para criar uma tabela com base em uma fonte que contém 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.For example, if you used SELECT INTO to create a table from a source containing a computed column expression described above, the data (using style 0) would be stored rather than the computed column definition itself. Você precisa atualizar manualmente esses dados para que correspondam ao estilo 121.You must manually update this data to match style 121.

ExemplosExamples

A.A. Usando CAST e CONVERTUsing both CAST and 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 seus valores ListPrice em int.These examples retrieve the name of the product, for those products that have a 3 as the first digit of list price, and converts their ListPrice values to 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.B. Usando CAST com operadores aritméticosUsing CAST with arithmetic operators

Este exemplo calcula uma computação de coluna única (Computed) dividindo as vendas totais acumuladas no ano (SalesYTD) pelo percentual de comissão (CommissionPCT).This example calculates a single column computation (Computed) by dividing the total year-to-date sales (SalesYTD) by the commission percentage (CommissionPCT). Esse valor é arredondado para o próximo número inteiro e, em seguida, é convertido em um tipo de dados int.This value is rounded to the nearest whole number and is then CAST to an int data type.

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.Here is the result set.

Computed
------
379753754
346698349
257144242
176493899
281101272
0  
301872549
212623750
298948202
250784119
239246890
101664220
124511336
97688107
(14 row(s) affected)  

C.C. Usando CAST para concatenarUsing CAST to concatenate

Este exemplo concatena expressões de não caractere usando CAST.This example concatenates noncharacter expressions by using CAST. Ele usa o banco de dados AdventureWorksDW.It uses the AdventureWorksDW database.

SELECT 'The list price is ' + CAST(ListPrice AS varchar(12)) AS ListPrice  
FROM dbo.DimProduct  
WHERE ListPrice BETWEEN 350.00 AND 400.00;  

Aqui está o conjunto de resultados.Here is the result set.

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  

D.D. Usando CAST para produzir texto mais legívelUsing CAST to produce more readable text

Este exemplo usa CAST na lista SELECT para converter a coluna Name em uma coluna char(10).This example uses CAST in the SELECT list, to convert the Name column to a char(10) column. Ele usa o banco de dados AdventureWorksDW.It uses the AdventureWorksDW database.

SELECT DISTINCT CAST(EnglishProductName AS char(10)) AS Name, ListPrice  
FROM dbo.DimProduct  
WHERE EnglishProductName LIKE 'Long-Sleeve Logo Jersey, M';  

Aqui está o conjunto de resultados.Here is the result set.

Name        ListPrice
----------  ---------
Long-Sleev  31.2437
Long-Sleev  32.4935
Long-Sleev  49.99  

E.E. Usando CAST com a cláusula LIKEUsing CAST with the LIKE clause

Este exemplo converte os valores SalesYTD da coluna money no tipo de dados int e, em seguida, no tipo de dados char(20), de modo que a cláusula LIKE possa usá-lo.This example converts the money column SalesYTD values to data type int, and then to data typechar(20), so that the LIKE clause can use it.

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.Here is the result set.

FirstName        LastName            SalesYTD         BusinessEntityID
---------------- ------------------- ---------------- -------------
Tsvi             Reiter              2811012.7151      279
Syed             Abbas               219088.8836       288
Rachel           Valdez              2241204.0424      289
(3 row(s) affected)  

F.F. Usando CONVERT ou CAST com XML com tipoUsing CONVERT or CAST with typed XML

Estes exemplos mostram o uso de CONVERT para converter dados em XML tipado, usando Tipo de dados e colunas XML (SQL Server).These examples show use of CONVERT to convert data to typed XML, by using the XML Data Type and Columns (SQL Server).

Este exemplo converte uma cadeia de caracteres com espaço em branco, texto e marcação em XML tipado e remove todos os espaços em branco insignificantes (espaço em branco delimitador entre nós):This example converts a string with white space, text and markup into typed XML, and removes all insignificant white space (boundary white space between nodes):

SELECT 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):This example converts a similar string with white space, text and markup into typed XML and preserves insignificant white space (boundary white space between nodes):

SELECT 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:This example casts a string with white space, text, and markup into typed XML:

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

Consulte Criar instâncias de dados XML para obter mais exemplos.See Create Instances of XML Data for more examples.

G.G. Usando CAST e CONVERT com dados datetimeUsing CAST and CONVERT with datetime data

Começando com valores GETDATE(), este exemplo exibe a data e a hora atuais, usa CAST para alterar a data e a hora atuais em um tipo de dados de caractere e, em seguida, usa CONVERT para exibir a data e a hora no formato ISO 8601.Starting with GETDATE() values, this example displays the current date and time, uses CAST to change the current date and time to a character data type, and then uses CONVERT to display the date and time in the ISO 8601 format.

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.Here is the result set.

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)  

Este exemplo é aproximadamente o oposto do exemplo anterior.This example is approximately the opposite of the previous example. Este exemplo exibe uma data e hora como dados de caracteres, usa CAST para alterar os dados de caractere no tipo de dados datetime e, em seguida, usa CONVERT para alterar os dados de caractere no tipo de dados datetime.This example displays a date and time as character data, uses CAST to change the character data to the datetime data type, and then uses CONVERT to change the character data to the datetime data type.

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.Here is the result set.

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.H. Usando CONVERT com dados binários e de caractereUsing CONVERT with binary and character data

Estes exemplos mostram os resultados da conversão de dados binários e de caractere usando estilos diferentes.These examples show the results of binary and character data conversion, using different styles.

--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.Here is the result set.

Style 0, binary to character
----------------------------
Name  
(1 row(s) affected)  

Este exemplo mostra que Style 1 pode impor o truncamento do resultado.This example shows that Style 1 can force result truncation. Os caracteres 0x no conjunto de resultados forçam o truncamento.The characters 0x in the result set force the truncation.

SELECT CONVERT(char(8), 0x4E616d65, 1) AS [Style 1, binary to character];  

Aqui está o conjunto de resultados.Here is the result set.

Style 1, binary to character
------------------------------
0x4E616D
(1 row(s) affected)  

Este exemplo mostra que Style 2 não trunca o resultado porque o resultado não inclui os caracteres 0x.This example shows that Style 2 does not truncate the result, because the result does not include the characters 0x.

SELECT CONVERT(char(8), 0x4E616d65, 2) AS [Style 2, binary to character];  

Aqui está o conjunto de resultados.Here is the result set.

Style 2, binary to character
------------------------------
4E616D65
(1 row(s) affected)  

Converta o valor de caractere 'Name' em um valor binário.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.Here is the result set.

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.Here is the result set.

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.Here is the result set.

Style 2, character to binary  
----------------------------------  
0x4E616D65
(1 row(s) affected)  

I.I. Convertendo os tipos de dados de data e horaConverting date and time data types

Este exemplo mostra a conversão de tipos de dados de data, hora e datetime.This example shows the conversion of date, time, and datetime data types.

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];  

Exemplos: Azure SQL Data WarehouseAzure SQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

J.J. Usando CAST e CONVERTUsing CAST and CONVERT

Este exemplo recupera o nome dos produtos que têm um 3 no primeiro dígito de seu preço de lista e converte o ListPrice desses produtos em int. Ele usa o banco de dados AdventureWorksDW.This example retrieves the name of the product for those products that have a 3 in the first digit of their list price, and converts the ListPrice of these products to int. It uses the AdventureWorksDW database.

SELECT EnglishProductName AS ProductName, ListPrice  
FROM dbo.DimProduct  
WHERE CAST(ListPrice AS int) LIKE '3%';  

Este exemplo mostra a mesma consulta, usando CONVERT em vez de CAST.This example shows the same query, using CONVERT instead of CAST. Ele usa o banco de dados AdventureWorksDW.It uses the AdventureWorksDW database.

SELECT EnglishProductName AS ProductName, ListPrice  
FROM dbo.DimProduct  
WHERE CONVERT(int, ListPrice) LIKE '3%';  

K.K. Usando CAST com operadores aritméticosUsing CAST with arithmetic operators

Este exemplo faz um cálculo de um valor de coluna única, dividindo o preço unitário do produto (UnitPrice) pelo percentual de desconto (UnitPriceDiscountPct).This example calculates a single column value by dividing the product unit price (UnitPrice) by the discount percentage (UnitPriceDiscountPct). Esse resultado é então arredondado para o número inteiro mais próximo e, por fim, convertido em um tipo de dados int.This result is then rounded to the nearest whole number, and finally converted to an int data type. Este exemplo usa o banco de dados AdventureWorksDW.This example uses the AdventureWorksDW database.

SELECT ProductKey, UnitPrice,UnitPriceDiscountPct,  
       CAST(ROUND (UnitPrice*UnitPriceDiscountPct,0) AS int) AS DiscountPrice  
FROM dbo.FactResellerSales  
WHERE SalesOrderNumber = 'SO47355'   
      AND UnitPriceDiscountPct > .02;  

Aqui está o conjunto de resultados.Here is the result set.

ProductKey  UnitPrice  UnitPriceDiscountPct  DiscountPrice
----------  ---------  --------------------  -------------
323         430.6445   0.05                  22
213         18.5043    0.05                  1
456         37.4950    0.10                  4
456         37.4950    0.10                  4
216         18.5043    0.05                  1  

L.L. Usando CAST com a cláusula LIKEUsing CAST with the LIKE clause

Este exemplo converte a coluna ListPrice money em um tipo int e, em seguida, em um tipo char(20), de modo que a cláusula LIKE possa usá-lo.This example converts the money column ListPrice to an int type, and then to a char(20) type, so that the LIKE clause can use it. Este exemplo usa o banco de dados AdventureWorksDW.This example uses the AdventureWorksDW database.

SELECT EnglishProductName AS Name, ListPrice  
FROM dbo.DimProduct  
WHERE CAST(CAST(ListPrice AS int) AS char(20)) LIKE '2%';  

M.M. Usando CAST e CONVERT com dados datetimeUsing CAST and CONVERT with datetime data

Este exemplo exibe a data e a hora atuais, usa CAST para alterar a data e a hora atuais em um tipo de dados de caractere e, por fim, usa CONVERT para exibir a data e a hora no formato ISO 8601.This example displays the current date and time, uses CAST to change the current date and time to a character data type, and finally uses CONVERT display the date and time in the ISO 8601 format. Este exemplo usa o banco de dados AdventureWorksDW.This example uses the AdventureWorksDW database.

SELECT TOP(1)  
   SYSDATETIME() AS UnconvertedDateTime,  
   CAST(SYSDATETIME() AS nvarchar(30)) AS UsingCast,  
   CONVERT(nvarchar(30), SYSDATETIME(), 126) AS UsingConvertTo_ISO8601  
FROM dbo.DimCustomer;  

Aqui está o conjunto de resultados.Here is the result set.

UnconvertedDateTime     UsingCast                     UsingConvertTo_ISO8601  
---------------------   ---------------------------   ---------------------------  
07/20/2010 1:44:31 PM   2010-07-20 13:44:31.5879025   2010-07-20T13:44:31.5879025  

Este exemplo é o oposto aproximado do exemplo anterior.This example is the rough opposite of the previous example. Este exemplo exibe uma data e hora como dados de caractere, usa CAST para alterar os dados de caractere no tipo de dados datetime e, em seguida, usa CONVERT para alterar os dados de caractere no tipo de dados datetime.This example displays a date and time as character data, uses CAST to change the character data to the datetime data type, and then uses CONVERT to change the character data to the datetime data type. Este exemplo usa o banco de dados AdventureWorksDW.This example uses the AdventureWorksDW database.

SELECT TOP(1)   
   '2010-07-25T13:50:38.544' AS UnconvertedText,  
CAST('2010-07-25T13:50:38.544' AS datetime) AS UsingCast,  
   CONVERT(datetime, '2010-07-25T13:50:38.544', 126) AS UsingConvertFrom_ISO8601  
FROM dbo.DimCustomer;  

Aqui está o conjunto de resultados.Here is the result set.

UnconvertedText         UsingCast               UsingConvertFrom_ISO8601
----------------------- ----------------------- ------------------------
2010-07-25T13:50:38.544 07/25/2010 1:50:38 PM   07/25/2010 1:50:38 PM  

Confira tambémSee also

Conversão de tipo de dados (Mecanismo de Banco de Dados)Data Type Conversion (Database Engine)
FORMAT (Transact-SQL)FORMAT (Transact-SQL)
STR (Transact-SQL)STR (Transact-SQL)
SELECT (Transact-SQL)SELECT (Transact-SQL)
Funções do sistema (Transact-SQL)System Functions (Transact-SQL)
Gravar instruções Transact-SQL internacionaisWrite International Transact-SQL Statements