Compartir a través de


Tipos de datos SQL

Cada DBMS define sus propios tipos de SQL. Cada controlador ODBC expone solo los tipos de datos SQL que define el DBMS asociado. Información sobre cómo un controlador asigna los tipos SQL de DBMS a los identificadores de tipo SQL definidos por ODBC y cómo un controlador asigna los tipos SQL de DBMS a sus propios identificadores de tipo SQL específicos del controlador se devuelve a través de una llamada a SQLGetTypeInfo. Un controlador también devuelve los tipos de datos SQL al describir los tipos de datos de columnas y parámetros mediante llamadas a SQLColAttribute, SQLColumns, SQLDescribeCol, SQLDescribeParam, SQLProcedureColumns y SQLSpecialColumns.

Nota

Los tipos de datos SQL se encuentran en los campos SQL_DESC_ CONCISE_TYPE, SQL_DESC_TYPE y SQL_DESC_DATETIME_INTERVAL_CODE de los descriptores de implementación. Las características de los tipos de datos SQL se incluyen en los campos SQL_DESC_PRECISION, SQL_DESC_SCALE, SQL_DESC_LENGTH y SQL_DESC_OCTET_LENGTH de los descriptores de implementación. Para obtener más información, vea Identificadores y descriptores de tipo de datos más adelante en este apéndice.

Un controlador y un origen de datos determinados no admiten necesariamente todos los tipos de datos SQL definidos en este apéndice. La compatibilidad de un controlador con los tipos de datos SQL depende del nivel de SQL-92 con el que cumple el controlador. Para determinar el nivel de gramática de SQL-92 compatible con el controlador, una aplicación llama a SQLGetInfo con el tipo de información SQL_SQL_CONFORMANCE. Además, un controlador determinado y un origen de datos pueden admitir tipos de datos SQL adicionales específicos del controlador. Para determinar qué tipos de datos admite un controlador, una aplicación llama a SQLGetTypeInfo. Para información sobre los tipos de datos SQL específicos del controlador, consulte la documentación del controlador. Para obtener información sobre los tipos de datos de un origen de datos específico, consulte la documentación de ese origen de datos.

Importante

Las tablas de este apéndice solo son directrices y muestran nombres, intervalos y límites de tipos de datos SQL usados normalmente. Un origen de datos determinado puede admitir solo algunos de los tipos de datos enumerados y las características de los tipos de datos admitidos pueden diferir de las enumeradas.

En la tabla siguiente se enumeran los identificadores de tipo SQL válidos para todos los tipos de datos SQL. En la tabla también se muestra el nombre y la descripción del tipo de datos correspondiente de SQL-92 (si existe alguno).

Identificador de tipo SQL[1] Datos DE SQL típicos

type[2]
Descripción típica del tipo
SQL_CHAR CHAR(n) Cadena de caracteres de longitud fija de cadena n.
SQL_VARCHAR VARCHAR(n) Cadena de caracteres de longitud variable con una longitud máxima de cadena n.
SQL_LONGVARCHAR LONG VARCHAR Datos de caracteres de longitud variable. La longitud máxima depende del origen de datos. [9]
SQL_WCHAR WCHAR(n) Cadena de caracteres Unicode de longitud fija de cadena n
SQL_WVARCHAR VARWCHAR(n) Cadena de caracteres de longitud variable Unicode con una longitud máxima de cadena n
SQL_WLONGVARCHAR LONGWVARCHAR Datos de caracteres Unicode de longitud variable. La longitud máxima depende del origen de datos
SQL_DECIMAL DECIMAL(p,s) Valor numérico, exacto y con signo con una precisión de al menos p y escala s. (La precisión máxima es definida por el controlador). (1 <= p<= 15; s< = p). [4]
SQL_NUMERIC NUMERIC(p,s) Con signo, exacto, valor numérico con una precisión p y escala s (1 <= p<= 15; s< = p). [4]
SQL_SMALLINT SMALLINT Valor numérico exacto con precisión 5 y escala 0 (firmado: -32,768 <= n<= 32,767, sin signo: 0 <= n<= 65,535)[3].
SQL_INTEGER ENTERO Valor numérico exacto con precisión 10 y escala 0 (firmado: -2[31] <= n<= 2[31] - 1, sin signo: 0 <= n<= 2[32] - 1)[3].
SQL_REAL REAL Valor numérico, aproximado y con signo con una precisión binaria 24 (cero o valor absoluto 10[-38] a 10[38]).
SQL_FLOAT FLOAT(p) Valor numérico, aproximado y con signo con una precisión binaria de al menos p. (La precisión máxima es definida por el controlador). [5]
SQL_DOUBLE DOUBLE PRECISION Valor numérico con signo, aproximado y con precisión binaria 53 (cero o valor absoluto 10[-308] a 10[308]).
SQL_BIT BIT Datos binarios de un solo bit. [8]
SQL_TINYINT TINYINT Valor numérico exacto con precisión 3 y escala 0 (firmado: -128 <= n<= 127, sin signo: 0 <= n<= 255)[3].
SQL_BIGINT bigint Valor numérico exacto con precisión 19 (si está firmado) o 20 (si no está firmado) y escala 0 (firmado: -2[63] <= n<= 2[63] - 1, sin signo: 0 <= n<= 2[64] - 1)[3],[9].
SQL_BINARY BINARY(n) Datos binarios de longitud fija n. [9]
SQL_VARBINARY VARBINARY(n) Datos binarios de longitud variable de longitud máxima n. El usuario establece el máximo. [9]
SQL_LONGVARBINARY LONG VARBINARY Datos binarios de longitud variable. La longitud máxima depende del origen de datos. [9]
SQL_TYPE_DATE[6] DATE Campos Year, month y day, conforme a las reglas del calendario gregoriano. (Vea Restricciones del calendario gregoriano, más adelante en este apéndice).
SQL_TYPE_TIME[6] TIME(p) Campos hour, minute y second, con valores válidos para horas de 00 a 23, valores válidos para minutos de 00 a 59 y valores válidos para segundos de 00 a 61. Precision p indica la precisión de segundos.
SQL_TYPE_TIMESTAMP[6] TIMESTAMP(p) Campos Year, month, day, hour, minute y second, con valores válidos definidos para los tipos de datos DATE y TIME.
SQL_TYPE_UTCDATETIME UTCDATETIME Campos year, month, day, hour, minute, second, utchour y utcminute. Los campos utchour y utcminute tienen precisión de 1/10 microsegundos.
SQL_TYPE_UTCTIME UTCTIME Campos hour, minute, second, utchour y utcminute. Los campos utchour y utcminute tienen precisión de 1/10 microsegundos.
SQL_INTERVAL_MONTH[7] INTERVAL MONTH(p) Número de meses entre dos fechas; p es la precisión inicial del intervalo.
SQL_INTERVAL_YEAR[7] INTERVAL YEAR(p) Número de años entre dos fechas; p es la precisión inicial del intervalo.
SQL_INTERVAL_YEAR_TO_MONTH[7] INTERVAL YEAR(p) TO MONTH Número de años y meses entre dos fechas; p es la precisión inicial del intervalo.
SQL_INTERVAL_DAY[7] INTERVAL DAY(p) Número de días entre dos fechas; p es la precisión inicial del intervalo.
SQL_INTERVAL_HOUR[7] INTERVAL HOUR(p) Número de horas entre dos fechas y horas; p es la precisión inicial del intervalo.
SQL_INTERVAL_MINUTE[7] INTERVAL MINUTE(p) Número de minutos entre dos fechas y horas; p es la precisión inicial del intervalo.
SQL_INTERVAL_SECOND[7] INTERVAL SECOND(p,q) Número de segundos entre dos fechas y horas; p es la precisión inicial del intervalo y q es la precisión de los segundos del intervalo.
SQL_INTERVAL_DAY_TO_HOUR[7] INTERVAL DAY(p) TO HOUR Número de días/horas entre dos fechas y horas; p es la precisión inicial del intervalo.
SQL_INTERVAL_DAY_TO_MINUTE[7] INTERVAL DAY(p) TO MINUTE Número de días/horas/minutos entre dos fechas y horas; p es la precisión inicial del intervalo.
SQL_INTERVAL_DAY_TO_SECOND[7] INTERVAL DAY(p) TO SECOND(q) Número de días/horas/minutos/segundos entre dos fechas y horas; p es la precisión inicial del intervalo y q es la precisión de los segundos del intervalo.
SQL_INTERVAL_HOUR_TO_MINUTE[7] INTERVAL HOUR(p) TO MINUTE Número de horas/minutos entre dos fechas y horas; p es la precisión inicial del intervalo.
SQL_INTERVAL_HOUR_TO_SECOND[7] INTERVAL HOUR(p) TO SECOND(q) Número de horas/minutos/segundos entre dos fechas y horas; p es la precisión inicial del intervalo y q es la precisión de los segundos del intervalo.
SQL_INTERVAL_MINUTE_TO_SECOND[7] INTERVAL MINUTE(p) TO SECOND(q) Número de minutos/segundos entre dos fechas y horas; p es la precisión inicial del intervalo y q es la precisión de los segundos del intervalo.
SQL_GUID GUID GUID de longitud fija.

[1] Este es el valor devuelto en la columna DATA_TYPE mediante una llamada a SQLGetTypeInfo.

[2] Este es el valor devuelto en la columna NAME y CREATE PARAMS mediante una llamada a SQLGetTypeInfo. La columna NAME devuelve la designación, por ejemplo, CHAR, mientras que la columna CREATE PARAMS devuelve una lista separada por comas de parámetros de creación, como precisión, escala y longitud.

[3] Una aplicación usa SQLGetTypeInfo o SQLColAttribute para determinar si un tipo de datos determinado o una columna determinada de un conjunto de resultados no tiene signo.

[4] SQL_DECIMAL y SQL_NUMERIC tipos de datos solo difieren en su precisión. La precisión de un decimal(p,s) es una precisión decimal definida por la implementación que no es menor que p, mientras que la precisión de un numeric(p,s) es exactamente igual a p.

[5] Dependiendo de la implementación, la precisión de SQL_FLOAT puede ser 24 o 53: si es 24, el tipo de datos SQL_FLOAT es el mismo que SQL_REAL; si es 53, el tipo de datos SQL_FLOAT es el mismo que SQL_DOUBLE.

[6] En ODBC 3.x, los tipos de datos sql date, time y timestamp son SQL_TYPE_DATE, SQL_TYPE_TIME y SQL_TYPE_TIMESTAMP, respectivamente; en ODBC 2.x, los tipos de datos se SQL_DATE, SQL_TIME y SQL_TIMESTAMP.

[7] Para obtener más información sobre los tipos de datos SQL de intervalo, vea la sección Tipos de datos de intervalo, más adelante en este apéndice.

[8] El tipo de datos SQL_BIT tiene características diferentes que el tipo BIT en SQL-92.

[9] Este tipo de datos no tiene ningún tipo de datos correspondiente en SQL-92.

En esta sección se proporciona el ejemplo siguiente.