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

Converte uma expressão de um tipo de dados para outro.Converts an expression of one data type to another.
Por exemplo, os exemplos a seguir alterar o tipo de dados de entrada, em dois outros tipos de dados, com diferentes níveis de precisão.For example, the following examples change the input datatype, into two other datatypes, with different levels of precision.

SELECT 9.5 AS Original, CAST(9.5 AS int) AS int, 
    CAST(9.5 AS decimal(6,4)) AS decimal;
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

Dica

Muitos exemplos estão na parte inferior deste tópico.Many examples are at the bottom of this topic.

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

SintaxeSyntax

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

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

ArgumentosArguments

expressãoexpression
É qualquer expressão.Is any valid expression.

data_typedata_type
É o tipo de dados de destino.Is 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 comprimento do tipo de dados de destino.Is an optional integer that specifies the length of the target data type. O valor padrão é 30.The default value is 30.

estilostyle
É uma expressão de inteiro que especifica como a função CONVERT converter expressão.Is an integer expression that specifies how the CONVERT function is to translate expression. Se o estilo for NULL, NULL será retornado.If style is NULL, NULL is returned. O intervalo é determinado pelo data_type.The range is determined by data_type.

Tipos de retornoReturn types

Retorna expressão convertido data_type.Returns expression translated to data_type.

Estilos de data e horaDate and Time Styles

Quando expressão é um tipo de dados de data ou hora, estilo pode ser um dos valores mostrados na tabela a seguir.When expression is a date or time data type, style can be one of the values shown in the following table. Outros valores são processados como 0.Other values are processed as 0. Começando com SQL Server 2012SQL Server 2012, os únicos estilos que têm suporte para a conversão de data e hora tipos para datetimeoffset são 0 ou 1.Beginning with SQL Server 2012SQL Server 2012, the only styles that are 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 tem suporte para o formato de data em árabe usando o algoritmo kuwaitiano. SQL ServerSQL Server supports the date format in Arabic style by using the Kuwaiti algorithm.

Sem século (AA) (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 AlemãoGerman 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: Quando o valor de milissegundos (mmm) for 0, o valor de milissegundos não é exibido.Note: When the value for milliseconds (mmm) is 0, the millisecond value is not displayed. 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 is displayed 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: Quando o valor de milissegundos (mmm) for 0, o valor de milissegundos não é exibido.Note: When the value for milliseconds (mmm) is 0, the milliseconds value is not displayed. 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 is displayed 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 Hijri 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's name. Esse valor não sejam renderizadas corretamente em um padrão instalação US 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 (estilo* 0* ou 100, 9 ou 109, 13 ou 113, 20 ou 120, e 21 ou 121) sempre retornam o século (AAAA).2 The default values (style* 0* or 100, 9 or 109, 13 or 113, 20 or 120, and 21 or 121) always return the century (yyyy).

3 de entrada quando você converte em datetime; saída quando você converte em dados de caractere.3 Input when you convert to datetime; output when you convert to character data.

4 projetados para uso XML.4 Designed for XML use. Para conversão de datetime ou smalldatetime para dados de caracteres, o formato de saída é conforme descrito na tabela anterior.For conversion from datetime or smalldatetime to character data, the output format is as described in the previous table.

5 islâmico é um sistema de calendário com muitas 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. Isto é, o ano 49 de dois dígitos é interpretado como 2049 e o ano 50 de dois dígitos é interpretado como 1950.That is, the two-digit year 49 is interpreted as 2049 and the two-digit year 50 is interpreted as 1950. Muitos aplicativos cliente, como aqueles que se baseiam em objetos Automation, usam um ano de corte de 2030.Many client applications, such as those based on Automation objects, use a cutoff year of 2030. SQL ServerSQL Serverfornece a opção de configuração de corte de ano de dois dígitos que altera o ano de corte usado pelo SQL ServerSQL Server e permite tratamento consistente de datas. provides the two digit year cutoff configuration option that changes the cutoff year used by SQL ServerSQL Server and allows for the consistent treatment of dates. É recomendável especificar anos de quatro dígitos.We recommend specifying four-digit years.

6 só tem suporte quando a conversão de dados de caractere para datetime ou smalldatetime.6 Only supported when casting from character data to datetime or smalldatetime. Quando dados de caracteres que representam somente data ou de componentes de hora são convertidos para o datetime ou smalldatetime tipos de dados, o componente de tempo não especificado é definido como 00:00:00.000 e o não especificado componente de data é definido como 1900-01-01.When character data that represents only date or only time components is cast 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.

7o indicador de fuso horário opcional, Z, é usado para tornar mais fácil mapear XML datetime valores que têm informações de fuso horário para SQL ServerSQL Server datetime valores que não contêm fuso .7The optional time zone indicator, Z, is used 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 é o indicador de fuso horário UTC-0.Z is the indicator for time zone UTC-0. Outros fusos horários são indicados com deslocamento de HH:MM na direção + ou -.Other time zones are indicated with HH:MM offset in the + or - direction. Por exemplo: 2006-12-12T23:45:12-08:00.For example: 2006-12-12T23:45:12-08:00.

Quando você converte em dados de caractere smalldatetime, os estilos que incluem segundos ou milissegundos mostram zeros nessas posições.When you convert to character data from smalldatetime, the styles that include seconds or milliseconds show zeros in these positions. É possível truncar partes não desejadas da data ao converter de datetime ou smalldatetime valores usando adequados char ou varchar comprimento do tipo de dados.You can truncate unwanted date parts when you convert from datetime or smalldatetime values by using an appropriate char or varchar data type length.

Quando você converte em datetimeoffset de dados de caracteres com um estilo que inclui uma hora, um deslocamento de fuso horário é anexado ao resultado.When you convert to datetimeoffset from character data with a style that includes a time, a time zone offset is appended to the result.

estilos float e realfloat and real styles

Quando expressão é float ou real, estilo pode ser um dos valores mostrados na tabela a seguir.When expression is float or real, style can be 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 para conversão sem perdas.Use for lossless conversion. Com esse estilo, cada distinto float ou o valor real é garantido para converter uma cadeia de caracteres distintos.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 Databasee a partir do SQL Server 2016SQL Server 2016.Applies to: Banco de dados SQL do AzureAzure SQL Database, and starting in SQL Server 2016SQL Server 2016.
126, 128, 129126, 128, 129 Incluído por razões herdadas e poderia ser preterido em uma versão futura.Included for legacy reasons and might be deprecated in a future release.

estilos Money e smallmoneymoney and smallmoney styles

Quando expressão é money ou smallmoney, estilo pode ser um dos valores mostrados na tabela a seguir.When expression is money or smallmoney, style can be 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 decimal. Por exemplo, 4235.98.No commas every three digits to the left of the decimal point, and two digits to the right of the decimal point; for example, 4235.98.
11 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.Commas every three digits to the left of the decimal point, and two digits to the right of the decimal point; for 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 decimal. Por exemplo, 4235.9819.No commas every three digits to the left of the decimal point, and four digits to the right of the decimal point; for example, 4235.9819.
126126 Equivalente ao estilo 2 ao converter para char(n) ou varchar (n)Equivalent to style 2 when converting to char(n) or varchar(n)

estilos XMLxml styles

Quando expressão é xml, estilo pode ser um dos valores mostrados na tabela a seguir.When expression is xml, style can be 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 comportamento de análise padrão que descarta 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 converter para o xml tipo de dados, SQL ServerSQL Server espaço em branco insignificante é tratado de maneira diferente no XML 1.0.Note: When you convert 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 padrão XML: space tratamento se comporte da mesma como se XML: space = "preserve" foi especificado em vez disso.This style setting sets the default xml:space handling to behave the same as if xml:space="preserve" has been specified instead.
22 Habilita o processamento de subconjunto de DTD interno limitado.Enable limited internal DTD subset processing.

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.If enabled, the server can use the following information that is provided in an internal DTD subset to perform nonvalidating parse operations.
-Padrões de atributos são aplicados.- Defaults for attributes are applied.
-Referências de entidade interno são resolvidas e expandidas.- Internal entity references are resolved and expanded.
-O modelo de conteúdo DTD é verificado quanto a exatidão sintática.- The DTD content model is checked for syntactical correctness.
O analisador ignorará subconjuntos de DTD externos.The parser ignores external DTD subsets. Também não avalia a declaração XML para ver se o autônomo atributo é definido Sim ou sem, mas analisa a instância XML como se fosse um autônomo documento.It also does not evaluate the XML declaration to see whether the standalone attribute is set yes or no, but instead parses the XML instance as if it is a stand-alone document.
33 Preserva espaço em branco insignificante e habilita processamento de subconjunto de DTD interno limitado.Preserve insignificant white space and enable limited internal DTD subset processing.

Estilos bináriosBinary styles

Quando expressão é Binary, varbinary, char, ou varchar, estilo pode ser um dos valores mostrados na tabela a seguir.When expression is binary(n), varbinary(n), char(n), or varchar(n), style can be one of the values shown in the following table. Valores de estilo que não estão listados na tabela retornarão um erro.Style values that are not listed in the table 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.
Se o data_type é um tipo binário, os caracteres 0x serão adicionados à esquerda do resultado.If the data_type is a binary type, the characters 0x are added to the left of the result.
1, 21, 2 Se o data_type é um tipo binário, a expressão deve ser uma expressão de caractere.If the data_type is a binary type, the expression must be a character expression. O expressão deve ser composto de 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 be composed of 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 estilo for definido como 1 os caracteres 0x devem ser os dois primeiros caracteres na expressão.If the style is set to 1 the characters 0x must be the first two characters in the expression. Se a expressão contiver um número de caracteres ímpar ou se algum dos caracteres for inválido, ocorrerá um erro.If the expression contains an odd number of characters or if any of the characters are invalid an error is raised.
Se o comprimento da expressão convertida for maior que o comprimento do data_type o resultado será truncado à direita.If the length of the converted expression is greater than the length of the data_type the result is right truncated.
Comprimento fixo data_types que são maiores do que o resultado convertido tem zeros adicionados à direita do resultado.Fixed length data_types that are larger than the converted result has zeros added to the right of the result.
Se o data_type for tipo de caractere, a expressão deve ser uma expressão de binária.If the data_type is a character type, the expression must be a binary expression. Cada caractere binário é convertido em dois caracteres hexadecimais.Each binary character is converted into two hexadecimal characters. Se o comprimento da expressão convertida for maior do que o data_type comprimento, ele será truncado à direita.If the length of the converted expression is greater than the data_type length, it will be right truncated.
Se o data_type é um tipo de caractere de tamanho fixo e o comprimento do resultado convertido for menor que o comprimento do data_type; espaços são adicionados à direita da expressão convertida para manter um mesmo número de dígitos hexadecimais.If the data_type is a fix sized character type and 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 estilo 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 são conversões que ocorrem sem especificar a função CAST ou CONVERT.Implicit conversions are those conversions that occur without specifying either the CAST or CONVERT function. Conversões explícitas são as conversões que exigem que a função CAST ou CONVERT seja especificada.Explicit conversions are those conversions that require the CAST or CONVERT function to be specified. 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 ServerSQL Server.The following illustration shows all explicit and implicit data type conversions that are allowed for SQL ServerSQL Server system-supplied data types. Isso inclui xml, bigint, e sql_variant.These include xml, bigint, and sql_variant. Não há nenhuma conversão implícita na atribuição do sql_variant tipo de dados, mas não há 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

Este gráfico está disponível como um arquivo PDF para download no Microsoft Download Center.This chart is available as a downloadable PDF file at the Microsoft Download Center.

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

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

Observação

Como dados Unicode sempre usam um número par de bytes, tenha cuidado ao converter binário ou varbinary em Unicode ou suporte para tipos de dados.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 de 41. Ela retorna 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).For example, the following conversion does not return a hexadecimal value of 41; it returns 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).

Tipos de dados de valor grandeLarge-value data types

Tipos de dados de valor grande exibem o mesmo comportamento de conversão implícita e explícita que suas contrapartes menores, especificamente o varchar, nvarchar e varbinarytipos de dados.Large-value data types exhibit the same implicit and explicit conversion behavior as their smaller counterparts, specifically the varchar, nvarchar and varbinary data types. Porém, você deve considerar as seguintes diretrizes:However, you should consider the following guidelines:

  • Conversão de imagem para varbinary (max) e vice-versa é uma conversão implícita, e também são as conversões entre texto e varchar (max), e ntext e nvarchar (max).Conversion from image to varbinary(max) and vice-versa is an implicit conversion, and so are conversions between text and varchar(max), and ntext and nvarchar(max).
  • Tipos de conversão de dados de valor grande, como varchar (max), digite um dados de contraparte menor, como varchar, é uma conversão implícita, mas o truncamento ocorre se o valor grande é muito grande para o comprimento 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 large value is too big for the specified length of the smaller data type.
  • Conversão de varchar, nvarchar, ou varbinary para os dados de valor grande correspondentes tipos é executada implicitamente.Conversion from varchar, nvarchar, or varbinary to their corresponding large-value data types is performed implicitly.
  • Conversão do sql_variant tipo de dados para os 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 para o sql_variant tipo de dados.Large-value data types cannot be converted to the sql_variant data type.

Para obter mais informações sobre como converter o xml tipo de dados, consulte criar instâncias de dados XML.For more information about how to convert from the xml data type, see Create Instances of XML Data.

tipo de dados xmlxml data type

Quando você explicitamente ou implicitamente convertido a xml tipo de dados para uma cadeia de caracteres ou tipo de dados binário, o conteúdo do xml tipo de dados é serializado com base em um conjunto de regras.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 set of rules. Para obter informações sobre essas regras, consulte definem os dados de serialização de 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 para o xml tipo de dados, consulte criar instâncias de dados XML.For information about how to convert from other data types to the xml data type, see Create Instances of XML Data.

tipos de dados de texto e imagemtext and image data types

Não há suporte para conversão de tipo de dados automática para o texto e imagem tipos de dados.Automatic data type conversion is not supported for the text and image data types. Você pode converter explicitamente texto dados para dados de caracteres, e imagem dados binário ou varbinary, mas o comprimento máximo é 8000 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, como a conversão de uma expressão de caractere que inclua letras para um int, SQL ServerSQL Server retorna uma mensagem de erro.If you try an incorrect conversion such as 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 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.When the output of CAST or CONVERT is a character string, and the input is a character string, 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

Quando você converte caracteres ou expressões binárias (char, nchar, nvarchar, varchar, binário, ou varbinary) para uma expressão de um tipo de dados diferente, dados podem ser truncados, exibidos apenas parcialmente ou um erro será retornado como o resultado é curto demais para ser exibido.When you convert character or binary expressions (char, nchar, nvarchar, varchar, binary, or varbinary) to an expression of a different data type, data can be truncated, only partially displayed, or an error is returned because the result is too short to display. Conversões para char, varchar, nchar, nvarchar, binário, e varbinary são truncados, com exceção das conversões mostradas na tabela a seguir.Conversions to char, varchar, nchar, nvarchar, binary, and varbinary 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, numérico, decimal, float, ou realmoney, smallmoney, numeric, decimal, float, or real charchar EE
varcharvarchar EE
ncharnchar EE
nvarcharnvarchar EE

*= O comprimento do resultado muito curto 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.

SQL ServerSQL Servergarante que apenas conversões de ida e volta, conversões de convertem um tipo de dados de seu tipo de dados original e voltar novamente, geram os mesmos valores de versão para versão. guarantees that only roundtrip conversions, 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 tente construir binário valores e, em seguida, convertê-los para um tipo de dados da categoria de tipo de dados numéricos.Do not try to construct binary values and then convert them to a data type of the numeric data type category. SQL ServerSQL Servernão garante que o resultado de uma decimal ou numérico conversão para tipo de dados binário será igual entre versões do 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)  

Ao converter tipos de dados que têm casas decimais diferentes, às vezes o valor resultante é truncado e em outras vezes ele é arredondado.When you convert data types that differ in decimal places, sometimes the result value is truncated and at other times it is rounded. A tabela a seguir mostra o comportamento.The following 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

Conversão de float valores que usam notação científica para decimal ou numérico é 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 para int ou numérico tipos: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;

Resultados da consulta são mostrados na tabela a seguir: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 you convert data types in which the target data type has fewer decimal places than the source data type, the value is rounded. Por exemplo, o resultado da seguinte conversão é $10.3497:For example, the result of the following conversion is $10.3497:

SELECT CAST(10.3496847 AS money);

SQL ServerSQL ServerRetorna uma mensagem de erro quando dados não numéricos char, nchar, varchar, ou nvarchar dados são convertidos em int , float, numérico, ou decimal. returns an error message when nonnumeric char, nchar, varchar, or nvarchar data is converted to int, float, numeric, or decimal. SQL ServerSQL Servertambém retorna um erro quando uma cadeia de caracteres vazia ("") é convertido em numérico ou decimal. also returns an error when an empty string (" ") is converted to numeric or decimal.

Determinadas conversões de datetime são nã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 substitutos)Supplementary characters (surrogate pairs)

A partir do SQL Server 2012SQL Server 2012, se você usar agrupamentos de caracteres suplementares (SC), uma operação de CONVERSÃO de nchar ou nvarchar para um nchar ou nvarchar tipo de comprimento menor não truncará dentro de um par substituto; truncará antes do caractere suplementar.Beginning in SQL Server 2012SQL Server 2012, if you use 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; it 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

Em versões anteriores do SQL ServerSQL Server, o estilo padrão de operações CAST e CONVERT nos tempo e datetime2 tipos de dados é 121, exceto quando o tipo é 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, o estilo padrão das operações CAST e CONVERT em tempo e datetime2 tipos de dados sempre é 121.Under compatibility level 110 and higher, the default style for CAST and CONVERT operations on time and datetime2 data types is always 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.If your 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ê 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.For example, if you used SELECT INTO to create a table from a source that contained a computed column expression described above, the data (using style 0) would be stored rather than the computed column definition itself. Você precisará atualizar manualmente esses dados para que coincidam com o estilo 121.You would need to 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 seu ListPrice em int.Each example retrieves the name of the product for those products that have a 3 in the first digit of their list price and converts their ListPrice 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

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).The following example calculates a single column computation (Computed) by dividing the total year-to-date sales (SalesYTD) by the commission percentage (CommissionPCT). Esse resultado é convertido em um tipo de dados int depois de ser arredondado para o número inteiro mais próximo.This result is converted to an int data type after being rounded to the nearest whole number.

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

O exemplo a seguir concatena expressões não são de caractere usando CONVERSÃO.The following example concatenates noncharacter expressions by using CAST. Usa AdventureWorksDW.Uses AdventureWorksDW.

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

O exemplo a seguir usa a CONVERSÃO na lista de seleção para converter o Name coluna para um char (10) coluna.The following example uses CAST in the SELECT list to convert the Name column to a char(10) column. Usa AdventureWorksDW.Uses AdventureWorksDW.

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        UnitPrice
----------  ---------
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

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.The following example converts the money column SalesYTD to an int and then to a char(20) column so that it can be used with the LIKE clause.

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         SalesPersonID
---------------- ------------------- ---------------- -------------
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

A seguir estão alguns exemplos que mostram como usar CONVERT para converter em XML com tipo usando o ( tipo de dados XML e colunas SQL Server ) .The following are several examples that show using CONVERT to convert 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 com tipo 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):

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):

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:

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

Para obter mais exemplos, consulte criar instâncias de dados XML.For more examples, see Create Instances of XML Data.

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

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.The following 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 display the date and time in the ISO 8901 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)  

O exemplo a seguir é aproximadamente o oposto do exemplo anterior.The following example is approximately the opposite of the previous example. 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.The 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

Os exemplos a seguir mostram os resultados da conversão de dados binários e de caractere usando estilos diferentes.The following examples show the results of converting binary and character data by 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)  

O exemplo a seguir mostra como o estilo 1 pode forçar o resultado a ser truncado.The following example shows how Style 1 can force the result to be truncated. O truncamento é causado por incluir os caracteres 0x no resultado.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.Here is the result set.

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

O exemplo a seguir mostra que o resultado não truncar o estilo 2 porque os caracteres 0x não são incluídos no resultado.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.Here is the result set.

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

Converta o valor do caractere 'Name' para 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

O seguinte exemplo demonstra a conversão de data, hora e tipos de dados de datetime.The following example demonstrates 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 do produto para os produtos que têm uma 3 no primeiro dígito de preço da lista e converte seu ListPrice para int. Usa 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 their ListPrice to int. Uses AdventureWorksDW.

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. Usa AdventureWorksDW.Uses AdventureWorksDW.

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

O exemplo a seguir calcula uma computação de coluna única, dividindo o preço de unidade do produto (UnitPrice) pela porcentagem de desconto (UnitPriceDiscountPct).The following example calculates a single column computation by dividing the product unit price (UnitPrice) by the discount percentage (UnitPriceDiscountPct). Esse resultado é convertido em um tipo de dados int depois de ser arredondado para o número inteiro mais próximo.This result is converted to an int data type after being rounded to the nearest whole number. Usa AdventureWorksDW.Uses AdventureWorksDW.

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

O exemplo a seguir converte a money coluna ListPrice para um int tipo e, em seguida, para um char(20) tipo de forma que ele pode ser usado com a cláusula LIKE.The following example converts the money column ListPrice to an int type and then to a char(20) type so that it can be used with the LIKE clause. Usa AdventureWorksDW.Uses AdventureWorksDW.

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

O exemplo a seguir exibe a data e hora atuais, usa a CONVERSÃO para alterar a data e hora atuais para um tipo de dados de caractere, e, em seguida, usa CONVERT exibe a data e hora no formato ISO 8601.The following 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 display the date and time in the ISO 8601 format. Usa AdventureWorksDW.Uses AdventureWorksDW.

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  

O exemplo a seguir é aproximadamente o oposto do exemplo anterior.The following example is approximately the opposite of the previous example. O exemplo exibe uma data e hora como dados de caracteres, usa a CONVERSÃO para alterar os dados de caractere para a datetime tipo de dados e, em seguida, usa CONVERT para alterar os dados de caracteres para o datetime tipo de dados.The 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. Usa AdventureWorksDW.Uses AdventureWorksDW.

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  

Consulte tambémSee also

Conversão de tipo de dados ( mecanismo de banco de dados )Data Type Conversion (Database Engine)
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