Tema SQL
Tipos de datos SQL
Clasificación de valores que puede almacenar cada columna: enteros y decimales con distinta precisión, texto de longitud fija o variable, fechas y marcas de tiempo, booleanos, binarios y tipos semiestructurados o espaciales según el motor.
Descripción
El tipo de cada columna fija el dominio de valores válidos, el espacio en disco, el comportamiento en comparaciones y ordenaciones, y a menudo qué índices u operadores están disponibles. ANSI/ISO ofrece una base común; los productos añaden tipos propios o alias (p. ej. TEXT, JSONB, UUID, ARRAY, GEOMETRY). Elegir DECIMAL frente a FLOAT no es anecdótico: el primero es exacto para importes y el segundo aproximado para cálculos científicos. Al diseñar tablas, alinea tipos con el consumo real en aplicación y revisa límites (tamaño máximo de VARCHAR, zona horaria en TIMESTAMP).
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
columna TIPO [ restricciones ]
-- Ejemplos frecuentes
INT, BIGINT, DECIMAL(p,s), VARCHAR(n), TEXT
DATE, TIME, TIMESTAMP, BOOLEAN
BINARY, BLOB, JSON / JSONB (según motor)
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- Numéricos
- INTEGER/BIGINT para contadores; DECIMAL(p,s) o NUMERIC para cantidades exactas; FLOAT/REAL/DOUBLE para aproximaciones. Evita mezclar sin CAST explícito en comparaciones críticas.
- Texto
- CHAR(n) rellena longitud fija; VARCHAR(n) solo almacena lo usado hasta el límite; TEXT/CLOB para documentos largos. Collation y charset afectan orden y comparación de cadenas.
- Temporal
- DATE (solo día), TIME, TIMESTAMP WITH o WITHOUT TIME ZONE según motor. Literales y funciones actuales (NOW, CURRENT_TIMESTAMP) dependen del dialecto y de la sesión.
Ejemplos
Ejemplo 1
CREATE TABLE demo_tipos (
id BIGINT PRIMARY KEY,
nombre VARCHAR(120) NOT NULL,
precio DECIMAL(12, 2),
creado_en TIMESTAMP
);
Ejemplo 2
SELECT CAST('2024-01-15' AS DATE) AS d;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.