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

ESTE TEMA SE APLICA A: síSQL Server (a partir de 2008)síAzure SQL DatabasesíAzure SQL Data Warehouse síAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Estas funciones convierten una expresión de un tipo de datos a otro.These functions convert an expression of one data type to another.

Ejemplo: cambio del tipo de datos de entradaExample: Change the input datatype

CastCast

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

ConvertirConvert


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

El conjunto de resultados es el siguiente.Here is the result set.

OriginalOriginal INTint Decimaldecimal
9.59.5 99 9.50009.5000

Vea los ejemplos que aparecen a continuación en este tema.See the examples later in this topic.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

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

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

ArgumentosArguments

expressionexpression
Cualquier expression válida.Any valid expression.

data_typedata_type
El tipo de datos de destino.The target data type. Esto engloba xml, bigint y sql_variant.This includes xml, bigint, and sql_variant. No se pueden utilizar tipos de datos de alias.Alias data types cannot be used.

lengthlength
Un número entero opcional que especifica la longitud del tipo de datos de destino.An optional integer that specifies the length of the target data type. El valor predeterminado es 30.The default value is 30.

stylestyle
Una expresión de tipo entero que especifica cómo traducirá la función CONVERT expression.An integer expression that specifies how the CONVERT function will translate expression. Para un valor de estilo NULL, se devuelve NULL.For a style value of NULL, NULL is returned. data_type determina el intervalo.data_type determines the range.

Tipos de valores devueltosReturn types

Devuelve expression, traducido a data_type.Returns expression, translated to data_type.

Estilos de fecha y horaDate and Time Styles

Para una expression que tenga el tipo de datos de fecha u hora, style puede tener uno de los valores que se muestran en la siguiente tabla.For a date or time data type expression, style can have one of the values shown in the following table. Otros valores se procesan como 0.Other values are processed as 0. A partir de SQL Server 2012 (11.x)SQL Server 2012 (11.x), los únicos estilos que se admiten al convertir de tipos de fecha y hora a datetimeoffset son 0 o 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 los demás estilos de conversión devuelven el error 9809.All other conversion styles return error 9809.

Nota

SQL ServerSQL Server admite el formato de fecha, en estilo árabe, con el algoritmo kuwaití. supports the date format, in Arabic style, with the Kuwaiti algorithm.

Sin el siglo (aa) (1)Without century (yy) (1) Con el siglo (aaaa)With century (yyyy) EstándarStandard Entrada/salida (3)Input/Output (3)
- 0 o 100 (1,2)0 or 100 (1,2) Valor predeterminado para datetime y smalldatetimeDefault for datetime and smalldatetime mes dd aaaa hh:mia.m. (o p.m.)mon dd yyyy hh:miAM (or PM)
11 101101 EE. UU.U.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 mes aa6 = dd mon yy
106 = dd mes aaaa106 = dd mon yyyy
77 107 (1)107 (1) - 7 = Mes dd, aa7 = Mon dd, yy
107 = Mes dd, aaaa107 = Mon dd, yyyy
88 108108 - hh:mi:sshh:mi:ss
- 9 o 109 (1,2)9 or 109 (1,2) Valor predeterminado + milisegundosDefault + milliseconds mes dd aaaa hh:mi:ss:mmma.m. (o p.m.)mon dd yyyy hh:mi:ss:mmmAM (or PM)
1010 110110 EE. UU.USA 10 = mm-dd-aa10 = mm-dd-yy
110 = mm-dd-aaaa110 = mm-dd-yyyy
1111 111111 JAPÓNJAPAN 11 = aa/mm/dd11 = yy/mm/dd
111 = aaaa/mm/dd111 = yyyy/mm/dd
1212 112112 ISOISO 12 = aammdd12 = yymmdd
112 = aaaammdd112 = yyyymmdd
- 13 o 113 (1,2)13 or 113 (1,2) Europeo predeterminado + milisegundosEurope default + milliseconds dd mes 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 o 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 o 121 (2)21 or 121 (2) ODBC canónico (con milisegundos), valor predeterminado para time, date, datetime2 y 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 (sin espacios)yyyy-mm-ddThh:mi:ss.mmm (no spaces)

Nota: en el caso de un valor 0 en milisegundos (mmm), el valor de fracción decimal en milisegundos no se mostrará.Note: For a milliseconds (mmm) value of 0, the millisecond decimal fraction value will not display. Por ejemplo, el valor "2012-11-07T18:26:20.000" se muestra 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 con zona horaria Z.ISO8601 with time zone Z. aaaa-mm-ddThh:mi:ss.mmmZ (sin espacios)yyyy-mm-ddThh:mi:ss.mmmZ (no spaces)

Nota: en el caso de un valor 0 en milisegundos (mmm), el valor decimal en milisegundos no se mostrará.Note: For a milliseconds (mmm) value of 0, the millisecond decimal value will not display. Por ejemplo, el valor "2012-11-07T18:26:20.000" se mostrará 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) Hijri (5)Hijri (5) dd mes aaaa hh:mi:ss:mmma.m.dd mon yyyy hh:mi:ss:mmmAM

En este estilo, mon es una representación Unicode Hijri multitoken del nombre completo del mes.In this style, mon represents a multi-token Hijri unicode representation of the full month name. Este valor no se representa correctamente en una instalación estadounidense predeterminada de SSMS.This value does not render correctly on a default US installation of SSMS.
- 131 (2)131 (2) Hijri (5)Hijri (5) dd/mm/aaaa hh:mi:ss:mmma.m.dd/mm/yyyy hh:mi:ss:mmmAM

1 Estos valores de estilo devuelven resultados no deterministas.1 These style values return nondeterministic results. Incluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo).Includes all (yy) (without century) styles and a subset of (yyyy) (with century) styles.

2 Los valores predeterminados (0 o 100, 9 o 109, 13 o 113, 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa).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 cuando se convierte en datetime; salida cuando se convierte en datos de caracteres.3 Input when you convert to datetime; output when you convert to character data.

4 Diseñado para usarse con XML.4 Designed for XML use. Para convertir datos datetime o smalldatetime en datos de caracteres, consulte la tabla anterior para ver el formato de salida.For conversion from datetime or smalldatetime to character data, see the previous table for the output format.

5 Hijri es un sistema del calendario con varias variaciones.5 Hijri is a calendar system with several variations. SQL ServerSQL Server utiliza el algoritmo kuwaití. uses the Kuwaiti algorithm.

Importante

De forma predeterminada, SQL ServerSQL Server interpreta los años de dos dígitos según el año límite 2049.By default, SQL ServerSQL Server interprets two-digit years based on a cutoff year of 2049. Esto significa que SQL Server interpreta el año de dos dígitos 49 como 2049 y el año de dos 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. Muchas aplicaciones cliente, como las que se basan en objetos de Automation, usan el año límite de 2030.Many client applications, including those based on Automation objects, use a cutoff year of 2030. SQL ServerSQL Server proporciona la opción de configuración de año límite de dos dígitos para cambiar el año límite usado por SQL ServerSQL Server. provides the two digit year cutoff configuration option to change the cutoff year used by SQL ServerSQL Server. Esto permite tratar las fechas de manera coherente.This allows for the consistent treatment of dates. Se recomienda especificar años de cuatro dígitos.We recommend specifying four-digit years.

6 Solo se admite en la conversión de datos de caracteres a datetime o smalldatetime.6 Only supported when casting from character data to datetime or smalldatetime. Al convertir datos de caracteres que representan componentes de solo fecha o solo hora al tipo de datos datetime o smalldatetime, el componente de hora no especificado se establece en 00:00:00.000 y el componente de fecha no especificado se establece en 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.

7Use el indicador opcional de zona horaria Z para facilitar la asignación de valores XML de tipo datetime que contienen información de zona horaria a valores de tipo SQL ServerSQL Server datetime que no tienen zona horaria.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 la zona horaria UTC-0.Z indicates time zone UTC-0. El desplazamiento HH:MM, en sentido + o -, indica otras zonas horarias.The HH:MM offset, in the + or - direction, indicates other time zones. Por ejemplo: 2006-12-12T23:45:12-08:00.For example: 2006-12-12T23:45:12-08:00.

Al convertir datos smalldatetime en datos de caracteres, los estilos que incluyen segundos o milisegundos muestran ceros en dichas posiciones.When converting smalldatetime to character data, the styles that include seconds or milliseconds show zeros in these positions. Al convertir valores datetime o smalldatetime, use una longitud adecuada de valor de datos char o varchar para truncar las partes de la fecha que no quiera.When converting from datetime or smalldatetime values, use an appropriate char or varchar data type length to truncate unwanted date parts.

Al convertir datos de caracteres en datos datetimeoffset con un estilo que incluye una hora, se anexa un desplazamiento de zona horaria al 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 y realfloat and real styles

En el caso de una expression float o real, style puede tener uno de los valores que se muestran en la siguiente tabla.For a float or real expression, style can have one of the values shown in the following table. Otros valores se procesan como 0.Other values are processed as 0.

ValorValue SalidaOutput
0 (valor predeterminado)0 (default) Un máximo de 6 dígitos.A maximum of 6 digits. Utilícelo en notación científica cuando proceda.Use in scientific notation, when appropriate.
11 Siempre 8 dígitos.Always 8 digits. Utilícelo siempre en notación científica.Always use in scientific notation.
22 Siempre 16 dígitos.Always 16 digits. Utilícelo siempre en notación científica.Always use in scientific notation.
33 Siempre 17 dígitos.Always 17 digits. Se usa para la conversión sin pérdida de información.Use for lossless conversion. Con este estilo, se garantiza que cada valor de float o real distinto se va a convertir en una cadena de caracteres distinta.With this style, every distinct float or real value is guaranteed to convert to a distinct character string.

: Base de datos SQL de AzureAzure SQL Database y a partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x).Applies to: Base de datos SQL de AzureAzure SQL Database, and starting in SQL Server 2016 (13.x)SQL Server 2016 (13.x).
126, 128, 129126, 128, 129 Se incluye por razones heredadas. Una versión futura podría dejar estos valores en desuso.Included for legacy reasons; a future release could deprecate these values.

Estilos money y smallmoneymoney and smallmoney styles

En el caso de una expression money o smallmoney, style puede tener uno de los valores que se muestran en la siguiente tabla.For a money or smallmoney expression, style can have one of the values shown in the following table. Otros valores se procesan como 0.Other values are processed as 0.

ValorValue SalidaOutput
0 (valor predeterminado)0 (default) Sin separadores de millar cada tres dígitos a la izquierda del separador decimal y dos dígitos a la derecha del separador decimalNo commas every three digits to the left of the decimal point, and two digits to the right of the decimal point

Ejemplo: 4235,98.Example: 4235.98.
11 Separadores de millar cada tres dígitos a la izquierda del separador decimal y dos dígitos a la derecha del separador decimalCommas every three digits to the left of the decimal point, and two digits to the right of the decimal point

Ejemplo: 3.510,92.Example: 3,510.92.
22 Sin separadores de millar cada tres dígitos a la izquierda del separador decimal y cuatro dígitos a la derecha del separador decimalNo commas every three digits to the left of the decimal point, and four digits to the right of the decimal point

Ejemplo: 4235.9819.Example: 4235.9819.
126126 Equivalente al estilo 2 al convertir a char(n) o varchar(n)Equivalent to style 2, when converting to char(n) or varchar(n)

Estilos xmlxml styles

En el caso de una expression xml, style puede tener uno de los valores que se muestran en la siguiente tabla.For an xml expression, style can have one of the values shown in the following table. Otros valores se procesan como 0.Other values are processed as 0.

ValorValue SalidaOutput
0 (valor predeterminado)0 (default) Usa el comportamiento de análisis predeterminado que descarta los espacios en blanco insignificantes y no permite un subconjunto DTD interno.Use default parsing behavior that discards insignificant white space, and does not allow for an internal DTD subset.

Nota: Al convertir al tipo de datos xml, los espacios en blanco insignificantes de SQL ServerSQL Server se controlan de forma distinta que en 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 más información, vea Crear instancias de datos XML.For more information, see Create Instances of XML Data.
11 Conserva los espacios en blanco insignificantes.Preserve insignificant white space. Esta configuración de estilo establece el control predeterminado de xml:space para emular el comportamiento de xml:space="preserve".This style setting sets the default xml:space handling to match the behavior of xml:space="preserve".
22 Habilita el procesamiento limitado de subconjuntos DTD internos.Enable limited internal DTD subset processing.

Si está habilitado, el servidor puede usar la siguiente información proporcionada en un subconjunto DTD interno para realizar operaciones de análisis que no se validan.If enabled, the server can use the following information that is provided in an internal DTD subset, to perform nonvalidating parse operations.

- Se aplican los valores predeterminados de los atributos- Defaults for attributes are applied
- Las referencias a entidades internas se resuelven y se amplían- Internal entity references are resolved and expanded
- Se comprueba la corrección sintáctica del modelo de contenido DTD- The DTD content model is checked for syntactical correctness

El analizador pasa por alto los subconjuntos DTD externos.The parser ignores external DTD subsets. Además, no evalúa la declaración XML para comprobar si el atributo standalone tiene el valor yes o no.Also, it does not evaluate the XML declaration to see whether the standalone attribute has a yes or no value. En su lugar, analiza la instancia XML como documento independiente.Instead, it parses the XML instance as a stand-alone document.
33 Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los subconjuntos DTD internos.Preserve insignificant white space, and enable limited internal DTD subset processing.

Estilos binariosBinary styles

En el caso de una expression binary(n), char(n), varbinary(n) o varchar(n), style puede tener uno de los valores que se muestran en la siguiente tabla.For a binary(n), char(n), varbinary(n), or varchar(n) expression, style can have one of the values shown in the following table. Los valores de estilo que no figuran en la tabla devolverán un error.Style values not listed in the table will return an error.

ValorValue SalidaOutput
0 (valor predeterminado)0 (default) Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCII.Translates ASCII characters to binary bytes, or binary bytes to ASCII characters. Cada carácter o byte se convierte con una proporción 1:1.Each character or byte is converted 1:1.

En el caso de un data_type binario, los caracteres 0x se agregan a la izquierda del resultado.For a binary data_type, the characters 0x are added to the left of the result.
1, 21, 2 Para un data_type binario, la expresión debe ser de caracteres.For a binary data_type, the expression must be a character expression. expression debe tener un número par de dígitos hexadecimales (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). Si style se establece en 1, los dos primeros caracteres deben ser 0x.If the style is set to 1, the must have 0x as the first two characters. Si la expresión contiene un número impar de caracteres o si alguno de los caracteres no es válido, se producirá un error.If the expression contains an odd number of characters, or if any of the characters is invalid, an error is raised.

Si la longitud de la expresión convertida supera la longitud de data_type, el resultado se truncará a la derecha.If the length of the converted expression exceeds the length of the data_type, the result is right truncated.

Los data_type de longitud fija que sean mayores que el resultado convertido tienen ceros agregados a la derecha del resultado.Fixed length data_types larger than the converted result have zeros added to the right of the result.

Los data_type con el tipo carácter necesitan una expresión binaria.A data_type of type character requires a binary expression. Cada carácter binario se convierte en dos caracteres hexadecimales.Each binary character is converted into two hexadecimal characters. Si la longitud de la expresión convertida supera la longitud de data_type, se truncará a la derecha.If the length of the converted expression exceeds the length of the data_type, it will be right truncated.

En el caso de que data_type sea un tipo de caracteres de tamaño fijo y de que la longitud del resultado convertido sea menor que la longitud de data_type, se agregan espacios a la derecha de la expresión convertida para mantener un número par de dígitos hexadecimales.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.

Los caracteres 0x se agregarán a la izquierda del resultado convertido para style 1.The characters 0x will be added to the left of the converted result for style 1.

Conversiones implícitasImplicit conversions

Las conversiones implícitas no requieren la especificación de la función CAST ni de la función CONVERT.Implicit conversions do not require specification of either the CAST function or the CONVERT function. Las conversiones explícitas requieren la especificación de la función CAST o de la función CONVERT.Explicit conversions require specification of the CAST function or the CONVERT function. En la siguiente ilustración se muestran todas las conversiones de tipos de datos explícitas e implícitas permitidas para los tipos de datos proporcionados por el sistema de SQL ServerSQL Server.The following illustration shows all explicit and implicit data type conversions allowed for SQL ServerSQL Server system-supplied data types. Algunas de ellas son bigint, sql_variant y xml.These include bigint, and sql_variant, and xml. No existe una conversión implícita en la asignación del tipo de datos sql_variant, pero sí hay una conversión implícita en sql_variant.There is no implicit conversion on assignment from the sql_variant data type, but there is implicit conversion to sql_variant.

Sugerencia

En el Centro de descarga de Microsoft está disponible este gráfico como archivo PDF para su descarga.The Microsoft Download Center has this chart available for download as a PDF file.

Tabla de conversión de tipos de datosData type conversion table

Al convertir entre datetimeoffset y los tipos de caracteres char, nchar, nvarchar y varchar, la parte del ajuste de zona horaria convertida siempre debe tener dígitos dobles para HH y 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 ejemplo: -08:00.For example, -08:00.

Nota

Puesto que los datos Unicode siempre usan un número par de bytes, preste atención al convertir datos binary o varbinary en o desde tipos de datos compatibles con Unicode.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 ejemplo, la siguiente conversión no devuelve el valor hexadecimal 41.For example, the following conversion does not return a hexadecimal value of 41. Devuelve un valor hexadecimal de 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 datos de valor grandeLarge-value data types

Los tipos de datos de valor grande tienen el mismo comportamiento de conversión implícita y explícita que sus equivalentes más pequeños, en concreto los tipos de datos nvarchar, varbinary y varchar.Large-value data types have the same implicit and explicit conversion behavior as their smaller counterparts - specifically, the nvarchar, varbinary, and varchar data types. Aun así, tenga en cuenta las directrices siguientes:However, consider the following guidelines:

  • La conversión de datos image a datos varbinary(max) y viceversa funciona como una conversión implícita, al igual que las conversiones entre text y varchar(max) y entre ntext y 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).
  • La conversión de tipos de datos de valor grande, como varchar(max), a un tipo de datos equivalente más pequeño, como varchar, es una conversión implícita, aunque se produce un truncamiento si el tamaño del valor grande supera la longitud especificada del tipo de datos más pequeño.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.
  • La conversión de nvarchar, varbinary o varchar a sus tipos de datos correspondientes de valor grande tiene lugar de forma implícita.Conversion from nvarchar, varbinary, or varchar to their corresponding large-value data types happens implicitly.
  • La conversión del tipo de datos sql_variant en los tipos de datos de valor grande es una conversión explícita.Conversion from the sql_variant data type to the large-value data types is an explicit conversion.
  • Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant.Large-value data types cannot be converted to the sql_variant data type.

Para más información sobre la conversión del tipo de datos xml, vea Crear instancias de datos XML.For more information about conversion from the xml data type, see Create Instances of XML Data.

Tipo de datos XMLxml data type

Cuando se convierte de forma explícita o implícita el tipo de datos xml en un tipo de datos de cadena o binario, el contenido del tipo de datos xml se serializa en función de un conjunto de reglas 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 más información sobre estas reglas, vea Definir la serialización de datos XML.For information about these rules, see Define the Serialization of XML Data. Para más información sobre la conversión de otros tipos de datos al tipo de datos xml, vea Crear instancias de datos XML.For information about conversion from other data types to the xml data type, see Create Instances of XML Data.

Tipos de datos text e imagetext and image data types

Los tipos de datos text e image no admiten la conversión automática de tipos de datos.The text and image data types do not support automatic data type conversion. Puede convertir explícitamente datos text en datos de caracteres y datos image en binary o varbinary, pero la longitud máxima es de 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. Si intenta una conversión incorrecta (por ejemplo, intentando convertir una expresión de caracteres que incluye letras) a un tipo int, SQL ServerSQL Server devolverá un mensaje de error.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.

Intercalación de salidaOutput Collation

Si las funciones CAST o CONVERT generan una cadena de caracteres y reciben una entrada de una cadena de caracteres, la salida tiene la misma intercalación y la misma etiqueta de intercalación que la 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. Si la entrada no es una cadena de caracteres, la salida tiene la intercalación predeterminada de la base de datos y una etiqueta de intercalación coaccionable-predeterminada.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 más información, vea Prioridad de intercalación (Transact-SQL).For more information, see Collation Precedence (Transact-SQL).

Para asignar otra intercalación a la salida, aplique la cláusula COLLATE a la expresión de resultado de las funciones CAST o CONVERT.To assign a different collation to the output, apply the COLLATE clause to the result expression of the CAST or CONVERT function. Por ejemplo:For example:

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

Truncar y redondear resultadosTruncating and rounding results

Al convertir expresiones binarias o de caracteres (binary, char, nchar, nvarchar, varbinary o varchar) en una expresión de otro tipo de datos, la operación de conversión podría truncar los datos de salida, mostrar solo parcialmente los datos de salida o devolver un error.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. Estos casos se producen si el resultado es demasiado corto para mostrarse.These cases will occur if the result is too short to display. Las conversiones a binary, char, nchar, nvarchar, varbinary o varchar se truncan, excepto aquellas que se muestran en la siguiente tabla.Conversions to binary, char, nchar, nvarchar, varbinary, or varchar are truncated, except for the conversions shown in the following table.

De tipo de datosFrom data type En tipo de datosTo data type ResultadoResult
int, smallint o tinyintint, smallint, or tinyint charchar *
varcharvarchar *
ncharnchar EE
nvarcharnvarchar EE
money, smallmoney, numeric, decimal, float o realmoney, smallmoney, numeric, decimal, float, or real charchar EE
varcharvarchar EE
ncharnchar EE
nvarcharnvarchar EE

* = Resultado demasiado corto para ser mostrado* = Result length too short to display

E = Error devuelto porque el resultado es demasiado corto para ser mostrado.E = Error returned because result length is too short to display.

SQL ServerSQL Server garantiza que solo las conversiones circulares (dicho de otra manera, las conversiones que convierten un tipo de datos en otro y después vuelven a convertirlo en el tipo de datos original) devuelvan los mismos valores en versiones diferentes. 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. En el siguiente ejemplo se muestra una conversión circular: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));  

Nota

No cree valores binary. Después, conviértalos a un tipo de datos de la categoría de datos numéricos.Do not construct binary values, and then convert them to a data type of the numeric data type category. SQL ServerSQL Server no garantiza que el resultado de una conversión de tipos de datos decimal o numeric a binary sea idéntica en las distintas versiones de 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.

En el siguiente ejemplo se muestra una expresión resultante demasiado corta para ser mostrada.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;  

El conjunto de resultados es el siguiente.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)  

Al convertir tipos de datos que difieren en los decimales, SQL Server devolverá a veces un valor de resultado truncado y otras veces devolverá un valor redondeado.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. En esta tabla se muestra el comportamiento.This table shows the behavior.

DeFrom ATo ComportamientoBehavior
numericnumeric numericnumeric RedondearRound
numericnumeric intint TruncamientoTruncate
numericnumeric moneymoney RedondearRound
moneymoney intint RedondearRound
moneymoney numericnumeric RedondearRound
floatfloat intint TruncamientoTruncate
floatfloat numericnumeric RedondearRound

La conversión de los valores float que usan la notación científica a decimal o numeric se restringe únicamente a los valores con una precisión de 17 dígitos.Conversion of float values that use scientific notation to decimal or numeric is restricted to values of precision 17 digits only. Cualquier valor con una precisión mayor de 17 se redondea a cero.Any value with precision higher than 17 rounds to zero.
floatfloat datetimedatetime RedondearRound
datetimedatetime intint RedondearRound

Por ejemplo, los valores 10,6496 y-10,6496 se pueden truncar o redondear durante la conversión a los tipos int o 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;

Los resultados de la consulta se muestran en la siguiente tabla:Results of the query are shown in the following table:

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

Al convertir tipos de datos donde el tipo de datos de destino tiene menos decimales que el tipo de datos de origen, el valor se redondea.When converting data types where the target data type has fewer decimal places than the source data type, the value is rounded. Por ejemplo, esta conversión devuelve $10.3497:For example, this conversion returns $10.3497:

SELECT CAST(10.3496847 AS money);

SQL ServerSQL Server devuelve un mensaje de error al convertir datos char, nchar, nvarchar o varchar no numéricos en datos decimal, float, int o numeric. returns an error message when converting nonnumeric char, nchar, nvarchar, or varchar data to decimal, float, int, numeric. SQL ServerSQL Server también devuelve un error cuando se convierte una cadena vacía (" ") en los tipos de datos numeric o decimal. also returns an error when an empty string (" ") is converted to numeric or decimal.

Determinadas conversiones de fecha y hora son no deterministasCertain datetime conversions are nondeterministic

En la siguiente tabla se muestran los estilos para los que la conversión de cadena a fecha y hora es no determinista.The following table lists the styles for which the string-to-datetime conversion is nondeterministic.

Todos los estilos por debajo de 1001All styles below 1001 106106
107107 109109
113113 130130

1 Con la excepción de los estilos 20 y 211 With the exception of styles 20 and 21

Caracteres adicionales (pares suplentes)Supplementary characters (surrogate pairs)

A partir de SQL Server 2012 (11.x)SQL Server 2012 (11.x), si se usan intercalaciones de caracteres complementarios (SC), lasa operaciones CAST de nchar o nvarchar a un tipo nchar o nvarchar de menor longitud no se truncarán dentro de un par suplente,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. sino que lo hará antes del carácter suplementario.Instead, the operation truncates before the supplementary character. Por ejemplo, el fragmento de código siguiente deja @x con solo 'ab'.For example, the following code fragment leaves @x holding just 'ab'. No hay espacio suficiente para albergar el carácter suplementario.There is not enough space to hold the supplementary character.

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

Al usar intercalaciones de SC, el comportamiento de CONVERT es análogo al de CAST.When using SC collations, the behavior of CONVERT, is analogous to that of CAST.

Soporte de compatibilidadCompatibility support

En versiones anteriores a SQL ServerSQL Server, el estilo predeterminado de las operaciones CAST y CONVERT en tipos de datos time y datetime2 es 121, a menos que se use otro tipo en una expresión de columna calculada.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 las columnas calculadas, el estilo predeterminado es 0.For computed columns, the default style is 0. Este comportamiento afecta a las columnas calculadas cuando se crean, cuando se utilizan en las consultas que implican parametrización automática o cuando se usan en definiciones de restricciones.This behavior impacts computed columns when they are created, used in queries involving auto-parameterization, or used in constraint definitions.

En el nivel de compatibilidad 110 y posteriores, las operaciones CAST y CONVERT en los tipos de datos time y datetime2 siempre tienen el estilo predeterminado 121.Under compatibility level 110 and higher, the CAST and CONVERT operations on the time and datetime2 datatypes always have 121 as the default style. Si una consulta se basa en el comportamiento anterior, use un nivel de compatibilidad menor de 110, o especifique explícitamente el estilo 0 en la consulta correspondiente.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.

Actualizar la base de datos al nivel de compatibilidad 110 y posteriores no cambiará los datos de usuario que se hayan almacenado en disco.Upgrading the database to compatibility level 110 and higher will not change user data that has been stored to disk. Debe corregir manualmente estos datos según convenga.You must manually correct this data as appropriate. Por ejemplo, si usara SELECT INTO para crear una tabla de un origen que contuviera una expresión de columna calculada como la descrita anteriormente, se almacenarían los datos (si se usa el estilo 0) en lugar de la propia definición de columna calculada.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. Debe actualizar manualmente estos datos para que coincidan con el estilo 121.You must manually update this data to match style 121.

EjemplosExamples

A.A. Utilizar CAST y CONVERTUsing both CAST and CONVERT

En estos ejemplos se recupera el nombre de aquellos productos que tienen un 3 como primer dígito del precio y se convierte sus valores ListPrice en 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. Utilizar CAST con operadores aritméticosUsing CAST with arithmetic operators

En este ejemplo se calcula una única columna (Computed) mediante la división de las ventas anuales hasta la fecha (SalesYTD) entre el porcentaje de la comisión (CommissionPCT).This example calculates a single column computation (Computed) by dividing the total year-to-date sales (SalesYTD) by the commission percentage (CommissionPCT). Este valor se redondea al número entero más cercano y luego se convierte (CAST) en un tipo de datos 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  

El conjunto de resultados es el siguiente.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. Utilizar CAST para concatenarUsing CAST to concatenate

En este ejemplo se concatenan expresiones que no son de caracteres usando CAST.This example concatenates noncharacter expressions by using CAST. Usa la base de datos 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;  

El conjunto de resultados es el siguiente.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. Utilizar CAST para obtener texto más legibleUsing CAST to produce more readable text

En este siguiente ejemplo se usa CAST en la lista SELECT para convertir la columna Name en una columna de tipo char(10).This example uses CAST in the SELECT list, to convert the Name column to a char(10) column. Usa la base de datos 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';  

El conjunto de resultados es el siguiente.Here is the result set.

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

E.E. Utilizar CAST con la cláusula LIKEUsing CAST with the LIKE clause

En este ejemplo se convierten los valores SalesYTD de la columna money al tipo de datos int y, después, al tipo de datos char(20), de modo que la cláusula LIKE pueda usarlo.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  

El conjunto de resultados es el siguiente.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. Utilizar CONVERT o CAST con XML con tipoUsing CONVERT or CAST with typed XML

En estos ejemplos se muestra el uso de CONVERT para convertir datos a XML con tipo mediante Tipo de datos XML y columnas (SQL Server).These examples show use of CONVERT to convert data to typed XML, by using the XML Data Type and Columns (SQL Server).

En este ejemplo se convierte una cadena con espacios en blanco, texto y marcado en XML con tipo y se quitan todos los espacios en blanco insignificantes (espacios en blanco de límite entre los nodos):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>')  

En este ejemplo se convierte una cadena similar con espacios en blanco, texto y marcado en XML con tipo y se conservan los espacios en blanco insignificantes (espacios en blanco de límite entre los nodos):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)  

En este ejemplo se convierte una cadena con espacios en blanco, texto y marcado en XML con 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)  

Vea Crear instancias de datos XML para ver más ejemplos.See Create Instances of XML Data for more examples.

G.G. Utilizar CAST y CONVERT con datos de fecha y horaUsing CAST and CONVERT with datetime data

A partir de los valores GETDATE(), en este ejemplo se muestran la fecha y la hora actuales, se usa CAST para cambiarlas a un tipo de datos de caracteres y, después, se usa CONVERT para mostrar la fecha y la hora en el 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  

El conjunto de resultados es el siguiente.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 ejemplo es lo opuesto, aproximadamente, al ejemplo anterior.This example is approximately the opposite of the previous example. En este ejemplo se muestra la fecha y la hora como datos de caracteres, se usa CAST para cambiar los datos de caracteres al tipo de datos datetime y, luego, se usa CONVERT para cambiar los datos de caracteres al tipo de datos 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  

El conjunto de resultados es el siguiente.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. Usar CONVERT con datos binarios y de caracteresUsing CONVERT with binary and character data

En estos ejemplos se muestran los resultados de la conversión de datos binarios y de caracteres 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];  

El conjunto de resultados es el siguiente.Here is the result set.

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

En este ejemplo se muestra que Style 1 puede forzar el truncamiento del resultado.This example shows that Style 1 can force result truncation. Los caracteres 0x del conjunto de resultados fuerzan el truncamiento.The characters 0x in the result set force the truncation.

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

El conjunto de resultados es el siguiente.Here is the result set.

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

En este ejemplo se muestra que Style 2 no trunca el resultado, ya que este no incluye los 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];  

El conjunto de resultados es el siguiente.Here is the result set.

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

Convierta el valor del carácter 'Name' en un valor binario.Convert the character value 'Name' to a binary value.

SELECT CONVERT(binary(8), 'Name', 0) AS [Style 0, character to binary];  

El conjunto de resultados es el siguiente.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];  

El conjunto de resultados es el siguiente.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];  

El conjunto de resultados es el siguiente.Here is the result set.

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

I.I. Convierte tipos de datos de fecha y horaConverting date and time data types

En este ejemplo se muestra la conversión de los tipos de datos date, time y 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];  

Ejemplos: Almacenamiento de datos SQL de AzureAzure SQL Data Warehouse y Almacenamiento de datos paralelosParallel Data WarehouseExamples: Almacenamiento de datos SQL de AzureAzure SQL Data Warehouse and Almacenamiento de datos paralelosParallel Data Warehouse

J.J. Usar CAST y CONVERTUsing CAST and CONVERT

En este ejemplo se recupera el nombre de aquellos productos que tienen un 3 como primer dígito del precio y se convierte su ListPrice en int. Usa la base de datos 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%';  

En este ejemplo se muestra la misma consulta, pero usando CONVERT en vez de CAST.This example shows the same query, using CONVERT instead of CAST. Usa la base de datos AdventureWorksDW.It uses the AdventureWorksDW database.

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

K.K. Utilizar CAST con operadores aritméticosUsing CAST with arithmetic operators

En este ejemplo se calcula un único valor de columna dividiendo el precio por unidad de producto (UnitPrice) entre el porcentaje de descuento (UnitPriceDiscountPct).This example calculates a single column value by dividing the product unit price (UnitPrice) by the discount percentage (UnitPriceDiscountPct). Este resultado se redondea al número entero más cercano y, por último, se convierte al tipo de datos int.This result is then rounded to the nearest whole number, and finally converted to an int data type. En este ejemplo se usa la base de datos 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;  

El conjunto de resultados es el siguiente.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. Utilizar CAST con la cláusula LIKEUsing CAST with the LIKE clause

En este ejemplo se convierte ListPrice de la columna money a un tipo int y, luego, a un tipo char(20), de modo que la cláusula LIKE pueda usarla.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. En este ejemplo se usa la base de datos 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. Utilizar CAST y CONVERT con datos de fecha y horaUsing CAST and CONVERT with datetime data

En este ejemplo se muestra la fecha y la hora actuales, se usa CAST para cambiarlas a un tipo de datos de caracteres y, por último, se usa CONVERT para mostrar la fecha y la hora en el 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. En este ejemplo se usa la base de datos 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;  

El conjunto de resultados es el siguiente.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 ejemplo es lo opuesto, aproximadamente, al ejemplo anterior.This example is the rough opposite of the previous example. En este ejemplo se muestra la fecha y la hora como datos de caracteres, se usa CAST para cambiar los datos de caracteres al tipo de datos datetime y, luego, se usa CONVERT para cambiar los datos de caracteres al tipo de datos 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. En este ejemplo se usa la base de datos 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;  

El conjunto de resultados es el siguiente.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  

Vea tambiénSee also

Conversiones de tipos de datos (motor de base de datos)Data Type Conversion (Database Engine)
FORMAT (Transact-SQL)FORMAT (Transact-SQL)
STR (Transact-SQL)STR (Transact-SQL)
SELECT (Transact-SQL)SELECT (Transact-SQL)
Funciones del sistema (Transact-SQL)System Functions (Transact-SQL)
Escribir instrucciones Transact-SQL internacionalesWrite International Transact-SQL Statements