Conversiones de tipos de datos (motor de base de datos)

Los tipos de datos se pueden convertir en los siguientes casos:

  • Cuando los datos de un objeto se comparan o se combinan con los datos de otro objeto, o bien se mueven a estos, puede que sea necesario convertir los datos desde el tipo de datos de un objeto al tipo de datos del otro.

  • Cuando los datos de una columna de resultados, un código de retorno o un parámetro de salida de Transact-SQL se mueven a una variable de programa, se deben convertir del tipo de datos del sistema de SQL Server al tipo de datos de la variable.

Cuando se realiza una conversión entre una variable de aplicación y una columna de conjunto de resultados, código de retorno, parámetro o marcador de parámetro de SQL Server, la API de base de datos define cuáles son las conversiones de tipos de datos admitidas.

Conversiones implícitas y explícitas

Los tipos de datos se pueden convertir de forma implícita o explícita.

Las conversiones implícitas no son visibles para el usuario. SQL Server convierte automáticamente los datos de un tipo de datos al otro. Por ejemplo, cuando smallint se compara con int, smallint se convierte implícitamente a int antes de que continúe la comparación.

GETDATE() se convierte implícitamente al estilo de fecha 0. SYSDATETIME() se convierte implícitamente al estilo de fecha 21.

Las conversiones explícitas utilizan las funciones CAST o CONVERT.

Las funciones CAST y CONVERT convierten un valor (una variable local, una columna u otra expresión) de un tipo de datos a otro. Por ejemplo, la siguiente función CAST convierte el valor numérico $157.27 a una cadena de caracteres '157.27':

CAST ( $157.27 AS VARCHAR(10) )

Utilice CAST en lugar de CONVERT si desea que el código de programa de Transact-SQL cumpla las normas ISO. Use CONVERT en lugar de CAST para aprovechar la funcionalidad de estilo de CONVERT.

En la ilustración siguiente 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 Server. Incluyen xml, bigint y sql_variant. 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.

Tabla de conversión de tipo de datos

Comportamientos de la conversión de tipos de datos

Algunas conversiones implícitas y explícitas de tipos de datos no se admiten cuando convierte el tipo de datos de un objeto de SQL Server a otro. Por ejemplo, un valor nchar no se puede convertir a un valor image. Un valor nchar solo se puede convertir a binary con una conversión explícita; la conversión implícita a binary no se admite. Sin embargo, un valor nchar se puede convertir implícita o explícitamente a nvarchar.

En los temas siguientes se describen los comportamientos de conversión que presentan los tipos de datos correspondientes:

binary y varbinary (Transact-SQL)

datetime2 (Transact-SQL)

money y smallmoney (Transact-SQL)

bit (Transact-SQL)

datetimeoffset (Transact-SQL)

smalldatetime (Transact-SQL)

char y varchar (Transact-SQL)

decimal y numeric (Transact-SQL)

sql_variant (Transact-SQL)

date (Transact-SQL)

float y real (Transact-SQL)

hora (Transact-SQL)

datetime (Transact-SQL)

int, bigint, smallint y tinyint (Transact-SQL)

uniqueidentifier (Transact-SQL)

Convertir tipos de datos con procedimientos almacenados de automatización OLE

SQL Server utiliza tipos de datos Transact-SQL y la automatización OLE utiliza tipos de datos Visual Basic; por tanto, los procedimientos almacenados de automatización OLE deben convertir los datos que se pasan entre ellos.

En la tabla siguiente se describen las conversiones de tipos de datos de SQL Server a Visual Basic.

Tipo de datos de SQL Server

Tipo de datos de Visual Basic

char, varchar, text, nvarchar, ntext

String

decimal, numeric

String

bit

Boolean

binary, varbinary, image

Matriz Byte() unidimensional

int

Long

smallint

Integer

tinyint

Byte

float

Double

real

Single

money, smallmoney

Currency

datetime, smalldatetime

Date

Cualquiera establecido en NULL

Variant establecido en NULL

Los valores únicos de SQL Server se convierten a un valor único de Visual Basic, con la excepción de los valores binary, varbinary y image. Estos valores se convierten a una matriz Byte() unidimensional en Visual Basic. Esta matriz incluye un intervalo de Byte(0 a length1) en que length es el número de bytes de los valores de SQL Server binary, varbinary o image.

A continuación se indican las conversiones de tipos de datos de Visual Basic a tipos de datos de SQL Server.

Tipo de datos de Visual Basic

Tipo de datos de SQL Server

Long, Integer, Byte, Boolean, Object

int

Double, Single

float

Currency

money

Date

datetime

String con 4.000 caracteres o menos

varchar/nvarchar

String con más de 4.000 caracteres

text/ntext

Matriz Byte() unidimensional con 8.000 bytes o menos

varbinary

Matriz Byte() unidimensional con más de 8.000 bytes

image

Vea también

Referencia

Procedimientos almacenados de automatización OLE (Transact-SQL)

CAST y CONVERT (Transact-SQL)

Tipos de datos (Transact-SQL)

COLLATE (Transact-SQL)