sqliteonline
En la sección anterior recomendé el sitio sqliteonline.com para que desde Internet cualquiera pueda practicar o probar expresiones SQL (con el motor SQLite) sin instalarlo en su equipo.
Entendiendo los tipos de datos
Primero observamos el mundo, luego obtenemos datos, luego creamos una tabla donde alojarlos con orden y lógica; y finalmente consultamos esos datos para tomar decisiones. En bases de datos relacionales existen ciertos tipos de datos que representan con fidelidad nuestros registros; y a su vez, ahorran recursos al permitir una extensión adecuada para números, textos, y otros varios.
En una tabla relacional es imposible que existan (por cada dato) diversos tipos de datos; y cada tipo de dato obligará a un límite (capacidad en bytes) y tipo de dato recibido (Zhao, 2021).
El motor SQLite (usado aquí para explicar el lenguaje SQL) explica los tipos de datos en este vínculo.
Bit y Byte
El bit es la unidad mínima de información digital. Solo puede guardar un solo dato: 0 ó 1. El byte aloja 8 bits (ocho unidades mínimas) como 1111 1111. Cada carácter de esta reseña ocupa un byte.
Tipos de datos numéricos en SQL para SQLite (Zhao, 2021, p. 145)
INT: Dato número entero, positivo o negativo. Acepta hasta 4 bytes de extensión (hasta 10 carácteres numéricos o 2.147.483.647). Es el más consistente entre sistemas de administración de base de datos, como SQLite o MySQL. Si se desea ingresar booleano (0 ó 1) usar este tipo.NUMERIC(): Decimal preciso con (máximo entero, máximo decimal)REAL: Número flotante con valores aproximados. No siempre usado para cálculos matemáticos precisos, pero sí para cálculos de distancias o ubicación. Para cálculos precisos con decimales mejor el tipoNUMERIC()-decimal- es un dato más estable.
No lo olvidemos: Cada tipo de dato presentado aquí corresponde a una columna da tabla. Y por ahora, esa tabla no tiene registros (o ingresos).
INT, NUMERIC(máximo 5 enteros, máximo 2 decimales) y REAL.
En lenguaje SQL, motor SQLite
-- Para NUMERIC(maximosDigitos,maximosDecimales)
CREATE TABLE tiposDatosNumericos (
entero INT, -- tipo dato entero
numero_decimal NUMERIC(5,2), -- tipo decimal
decimalFloat REAL -- tipo decimal flotante
)
-- Columnas
-- entero | numero_decimal | decimalFloat |
-- ... ...... fila de dato .... ... ...
-- ... ...... fila de dato .... ... ...
Tipo de dato alfanumérico (string) en SQL para SQLite
Permite letras, números o signos, siempre entre comillas simples. Ojo, el motor SQLite simplifica ese tipo de dato solo con el tipo TEXT. A diferencia de otros motores (como MYSQL) que tienen tipos más categorizados como CHAR(maxNum), VARCHAR(maxNum), TINY, MEDIUM, TEXT, etc.
- Tipo de dato
TEXT: Permite un rango extensísimo de alfanuméricos. A diferencia de otros motores SQL (como MySQL, que permiten muchos más tipos de datos alfanuméricos) SQLite usa el tipo TEXT para ese tipo de ingresos. También acepta caracteres Unicode. TEXT: También permite alojar formato fecha en la forma YYYY-MM-DD, HH:MM:SS.SSS (SQLite no cuenta un tipo de dato formal para fecha)
Tipo de dato fecha y tiempo en SQL para SQLite
En SQLite el operador DATE no es un tipo de dato formal rígido al estilo PostgreSQL o MySQL. Solo es una función que recibe un texto y lo convierte en un formato YYYY-MM-DD.
Se recomienda usar el tipo TEXT para ingresar fecha en el formato YYYY-MM-DD. OJO con el uso de las comillas simples para los valores de las funciones DATE('') y TIME('').
Para Zhao (2021, p. 171), "SQLite no tiene un tipo de datos de fecha y hora. En su lugar, TEXT, REAL o INTEGER se pueden usar para almacenar valores de fecha y hora."
Tipos de datos numéricos en SQL para SQLite (Zhao, 2021, p. 145)
- Función
SELECT DATE(''): Es una función independiente de la existencia de una tabla. - Dato
TEXT: Permite ingresar un texto en formato YY-DD-M; pero solo como texto plano, no como tipo fecha. - Función
SELECT TIME(''): Independiente de la existencia de una tabla. Devuelve en formato hh:min:seg un texto.. - Función
SELECT TIME('now', 'localtime'): Da hora local.
En SQL
-- Creamos tabla dia con columna nombre 'hoy'
CREATE TABLE fechas (
hoy TEXT -- Usamos tipo TEXT
); -- OJOTE!, cada expresión se separa con punto y coma
-- Pedimos al sistema agregar fecha de hoy
INSERT INTO fechas (hoy)
VALUES (DATE('now')); -- Funcion DATE()
-- Consultamos todos los registros de esa tabla
SELECT * FROM fechas;
-- | hoy
-- | 2026-05-21
-- +++++
-- Si solo deseamos que el sistema muestre fecha actual
-- OJO: Sin tomar en cuenta zona horaria
-- Sin necesidad de una tabla
SELECT DATE('now');
/*
DATE('now')|
-----------+
2026-05-21 |
*/
-- Para determinar fecha
-- PRECISA, según zona
SELECT DATE('now', 'localtime');
--- +++++++
-- Operando con el dato DATE(now)
SELECT DATE('now', '+1000 days');
/*
DATE('now', '+1000 days')
2029-02-14
*/
Para la función TIME('') (ojo con los cierres de expresión con el punto y coma).
En SQL
-- CREO TABLA tiempo
CREATE TABLE tiempo(
hora TIME -- Con dato TIME, aunque lo alojará como TEXT
);
-- Inserto registro en atributo hora
INSERT INTO tiempo (hora) VALUES ('20:10:00');
-- Muestra todo lo de tabla tiempo
SELECT * FROM tiempo;
/*
hora
20:10:00| */
-- +++++++
-- Para devolver hora actual y local
SELECT TIME('now', 'localtime');
-- 11:57:33
-- ++++++
-- Para mostrar dia y hora JUNTOS
SELECT
DATE('now', 'localtime'),
TIME('now', 'localtime');
/*
------------+--------
2026-05-21 |12:17:39 */
-- +++++
-- Para formato en diagonales con fecha zona horaria
-- 🚸 OJO, 21/05/2026 NO ES UN FORMATO STANDAR PARA FECHA
SELECT STRFTIME('%d/%m/%Y', 'now', 'localtime');
-- 21/05/2026
SQLite puede interpretar tipos de datos (desde MySQL, por ejemplo) como DATE(), TIME(), y DATETIME(). Finalmente, para realizar insertos de fecha y tiempo desde atributos de texto y números (ojo, solo en motor SQLite):
En SQL
CREATE TABLE datos (
-- Si aqui hay 3 atributos (columnas)
dt_text TEXT, --tipo texto
dt_real REAL, -- tipo decimal
dt_integer INTEGER -- tipo entero
);
INSERT INTO datos VALUES (
-- Aqui DEBEN haber también 3 registros
'2021-12-25 7:00:01', -- ojo formato
'2021-12-25 7:00:01',
'2021-12-25 7:00:01'
);
-- Mostrar datos
SELECT * FROM datos;
--dt_text |dt_real |dt_integer |
------------------+------------------+------------------+
-- 2021-12-25 7:00:01|2021-12-25 7:00:01|2021-12-25 7:00:01|
Tipo de dato booleano en SQL para SQLite
SQLite sí interpreta la cláusula BOOLEAN para recibir claves como true, false. Es así de sencillo:
En SQL
CREATE TABLE tabla_booleana (
-- UNA COLUMNA
-- Nombre de sola columna para booleano
datoBoole BOOLEAN
);
INSERT INTO tabla_booleana
VALUES
-- TRES FILAS
(TRUE), (false), (1);
-- Mostrar
SELECT * FROM tabla_booleana;
/*
datoBoole|
---------+
1|
0|
1|
*/
Por lo tanto (y esto es algo que nos sirve ir revisando desde ya) lo ocurrido arriba (visualmente) se resume en:
Tipos de archivos Binary Large Object (BLOB), audio, imágenes, archivos comprimidos, videos y otros documentos en SQL desde SQLite
🤤 se pone bueno. Hay dos formas de alojar datos BLOB desde SQL en cada columna de la tabla: en forma de bytes (valores binarios) o en forma de rutas o vínculos web cuando los archivos contienen muchos datos (es decir, son pesados). SQLite aloja solo lo que el archivo 'pesa'. Otros motores SQL dan máximos de espacio en bytes (mediun o large blob). .
- Alojamiento en conjuntos binarios: Alojado en la base de datos en forma de código binario (01100001) o hexadecimal (0xAF12).
- Alojamiento de vínculos o rutas web: El vínculo (y no el archivo) se alojará en la base de datos.
- Incluso con dato BLOB, SQLite también puede almacenar texto allí, aunque otros motores SQL podrían rechazar ese tipo de ingreso.
- Lo hexadecimal es una forma más compacta de binario. Donde un dato hexadecimal
'FFA9550F'(base numeral de 16: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) representa en binario'111 111 111 010 101 001 010 101 000 011 11'.
Tipo de dato booleano en SQL para SQLite
SQLite sí interpreta la cláusula BOOLEAN para recibir claves como true, false. Es así de sencillo:
En SQL
-- Tabla con columna para BLOB
CREATE TABLE bloby (
columnaBinaria BLOB
);
-- 3 filas con registros hexadecimales
INSERT INTO bloby VALUES
(X'61'), -- representa letra 'a'
(X'616161'), -- representa 'aaa'
(X'61652420696F75'); -- representa ae$ iou
-- Mostrar lo ingresado
SELECT * FROM bloby;
/*
columnaBinaria|
--------------+
a |
aaa |
ae$ iou |
*/
Una imagen sencilla convertida a código hexadecimal (el que recibiría un dato tipo BLOB) se ve así:
Qué necesitamos ahora
Sigamos explorando las funciones lógicas antes de aplicarlo a sentencias más complejas.
Estudio de bases de datos relacionales.