En SQL Server, los tipos de columnas se determinan por los tipos de datos disponibles. Estos tipos se clasifican en varias categorías según el tipo de información que almacenan. A continuación, se presenta una lista organizada por categoría:
1. Tipos de datos numéricos
Enteros
- TINYINT: Enteros de 0 a 255 (1 byte).
- SMALLINT: Enteros de -32,768 a 32,767 (2 bytes).
- INT: Enteros de -2,147,483,648 a 2,147,483,647 (4 bytes).
- BIGINT: Enteros de -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 (8 bytes).
Decimales y flotantes
- DECIMAL(p, s) o NUMERIC(p, s): Números exactos con precisión y escala definidas.
p
: Precisión total (máx. 38 dígitos).s
: Escala (dígitos a la derecha del punto decimal).
- FLOAT(n): Números aproximados basados en precisión binaria.
n
: Precisión opcional (1-53).
- REAL: Números aproximados (precisión de 24 bits).
Monetarios
- MONEY: Valores monetarios de -922,337,203,685,477.5808 a 922,337,203,685,477.5807 (8 bytes).
- SMALLMONEY: Valores monetarios de -214,748.3648 a 214,748.3647 (4 bytes).
2. Tipos de datos de texto y cadenas
Texto fijo
- CHAR(n): Cadena de texto de longitud fija (máx. 8,000 caracteres).
Texto variable
- VARCHAR(n): Cadena de texto de longitud variable (máx. 8,000 caracteres).
- VARCHAR(MAX): Cadena de texto de longitud variable (máx. 2^31-1 caracteres).
Texto Unicode
- NCHAR(n): Cadena Unicode de longitud fija (máx. 4,000 caracteres).
- NVARCHAR(n): Cadena Unicode de longitud variable (máx. 4,000 caracteres).
- NVARCHAR(MAX): Cadena Unicode de longitud variable (máx. 2^31-1 caracteres).
Texto de gran tamaño (obsoleto, solo por compatibilidad)
- TEXT: Texto de longitud variable (máx. 2^31-1 caracteres). [Desaconsejado, usar
VARCHAR(MAX)
].
3. Tipos de datos de fecha y hora
- DATE: Solo fecha (formato
YYYY-MM-DD
, desde 0001-01-01 hasta 9999-12-31). - TIME: Solo hora (formato
hh:mm:ss[.nnnnnnn]
). - DATETIME: Fecha y hora combinadas (desde 1753-01-01 hasta 9999-12-31, precisión de 3.33 ms).
- SMALLDATETIME: Fecha y hora combinadas (desde 1900-01-01 hasta 2079-06-06, precisión de 1 minuto).
- DATETIME2: Fecha y hora con precisión ajustable (desde 0001-01-01 hasta 9999-12-31, precisión hasta 100 ns).
- DATETIMEOFFSET: Fecha y hora con información de zona horaria.
4. Tipos de datos binarios
- BINARY(n): Datos binarios de longitud fija (máx. 8,000 bytes).
- VARBINARY(n): Datos binarios de longitud variable (máx. 8,000 bytes).
- VARBINARY(MAX): Datos binarios de longitud variable (máx. 2^31-1 bytes).
- IMAGE: Datos binarios de gran tamaño (obsoleto, usar
VARBINARY(MAX)
).
5. Tipos de datos de identificación y únicos
- UNIQUEIDENTIFIER: Almacena un GUID (Global Unique Identifier).
6. Tipos de datos espaciales
- GEOGRAPHY: Representa datos geográficos (coordenadas de latitud/longitud en formato de sistema global).
- GEOMETRY: Representa datos geométricos (puntos, líneas, polígonos en un plano cartesiano).
7. Tipos de datos XML y JSON
- XML: Almacena datos en formato XML.
- JSON: Aunque no es un tipo de datos nativo, se pueden manipular datos JSON con funciones específicas en SQL Server.
8. Tipos de datos jerárquicos
- HIERARCHYID: Representa datos jerárquicos, como estructuras de árbol.
9. Tipos de datos para almacenamiento temporal
- ROWVERSION o TIMESTAMP: Número binario único que cambia cada vez que se actualiza una fila (no es un tipo de fecha/hora).
10. Tipos de datos especializados
- CURSOR: Referencia a un cursor en la base de datos (para manejar conjuntos de resultados fila por fila).
- TABLE: Tipo especial usado para definir variables de tabla en T-SQL.
Conversión explícita
En SQL Server, las conversiones de tipos de datos se dividen en dos categorías principales:
- Conversión implícita: SQL Server realiza la conversión automáticamente cuando no hay riesgo de pérdida de datos.
- Conversión explícita: El desarrollador especifica explícitamente la conversión utilizando funciones como
CAST
oCONVERT
.
A continuación, se enumeran todas las conversiones de tipos de datos que se pueden realizar en SQL Server, organizadas por categoría:
1. Conversión explícita
a. Usando la función CAST
La función CAST
convierte un valor de un tipo de datos a otro de manera estándar.
Ejemplo:
b. Usando la función CONVERT
La función CONVERT
es específica de SQL Server y permite conversiones con formatos adicionales (especialmente para fechas).
Ejemplo:
2. Tipos de conversiones soportadas
a. De numéricos a texto
- Convertir de tipos numéricos (
INT
,FLOAT
,DECIMAL
, etc.) a texto (CHAR
,VARCHAR
,NVARCHAR
):
b. De texto a numéricos
- Convertir de texto (
CHAR
,VARCHAR
,NVARCHAR
) a tipos numéricos:
c. De fecha/hora a texto
- Convertir de tipos de fecha (
DATE
,DATETIME
,DATETIME2
, etc.) a texto:
d. De texto a fecha/hora
- Convertir de texto (
VARCHAR
,NVARCHAR
) a tipos de fecha:
e. De binarios a texto
- Convertir datos binarios (
BINARY
,VARBINARY
) a texto (VARCHAR
,NVARCHAR
):
f. De texto a binarios
- Convertir texto (
VARCHAR
,NVARCHAR
) a datos binarios:
g. De GUID a texto
- Convertir identificadores únicos (
UNIQUEIDENTIFIER
) a texto:
h. De texto a GUID
- Convertir texto (
VARCHAR
) a identificadores únicos:
i. De numéricos a fecha/hora
- Convertir números a fechas/hora (como marca de tiempo en formato flotante):
j. De booleanos simulados
SQL Server no tiene un tipo BOOLEAN
nativo, pero puedes convertir valores enteros (0
, 1
) en texto o viceversa:
- De entero a texto:
3. Formatos de conversión con CONVERT
La función CONVERT
permite formatear valores durante la conversión, especialmente para fechas. Aquí tienes algunos códigos de formato comunes:
Código | Formato de fecha | Ejemplo |
---|---|---|
101 | MM/DD/YYYY | 01/07/2025 |
103 | DD/MM/YYYY | 07/01/2025 |
112 | YYYYMMDD | 20250107 |
120 | YYYY-MM-DD HH:MI:SS | 2025-01-07 12:00:00 |
126 | ISO8601 (con T) | 2025-01-07T12:00:00 |
4. Consideraciones importantes
a. Riesgos de pérdida de datos
- Convertir de texto a un tipo numérico o de fecha puede fallar si el formato no es compatible:
b. Truncamiento
- Al convertir un valor largo a un tipo más corto, los datos pueden truncarse:
c. Precisión
- Al convertir entre tipos numéricos, verifica la precisión para evitar errores: