Modelado físico avanzado relacional de bases de datos
Curso sobre Funciones JSON en SQL
Las funciones JSON en SQL permiten manipular y extraer información de datos almacenados en formato JSON. Estas funciones son útiles cuando trabajamos con bases de datos que almacenan estructuras semiestructuradas. A continuación, veremos las funciones más utilizadas en MySQL y PostgreSQL, ya que SQLite tiene soporte limitado para JSON.
1. JSON_EXTRACT() - Extraer Datos desde JSON
JSON_EXTRACT() se usa para obtener valores de un campo JSON en MySQL y PostgreSQL (como -> y ->> en PostgreSQL).
Ejemplo:
1SELECT JSON_EXTRACT('{"nombre": "Juan", "edad": 30}', '$.nombre'); -- Resultado: "Juan" 2 3-- También puedes usar el alias corto: 4SELECT '$.nombre' -> '$.nombre'; -- en versiones modernas
1-- `->` devuelve un valor JSON. 2SELECT '{"nombre": "Juan", "edad": 30}'::json->'nombre'; 3 4-- `->>` devuelve el valor como texto. 5SELECT '{"nombre": "Juan", "edad": 30}'::json->>'nombre';
2. JSON_OBJECT() y JSON_BUILD_OBJECT() - Crear un Objeto JSON
Estas funciones permiten construir un JSON dinámicamente desde columnas.
Ejemplo:
1SELECT JSON_OBJECT('nombre', nombre, 'edad', edad) FROM empleados;
3. JSON_ARRAY() y JSON_BUILD_ARRAY() - Crear un Array JSON
Permiten crear arrays de valores JSON a partir de múltiples datos.
Ejemplo:
1SELECT JSON_ARRAY('Juan', 'María', 'Carlos');
4. JSON_CONTAINS() - Buscar Valores en JSON (Solo en MySQL)
Permite verificar si un JSON contiene un valor específico.
Ejemplo:
1SELECT JSON_CONTAINS('["rojo", "azul", "verde"]', '"azul"'); -- Resultado: 1
Esto devuelve 1 si el valor está presente y 0 si no lo está.
5. JSONB_EXISTS() - Buscar Valores en JSONB (Solo en PostgreSQL)
Para PostgreSQL, cuando se usa JSONB, se puede verificar si un campo JSON contiene una clave específica.
1SELECT nombre, datos 2FROM empleados 3WHERE JSONB_EXISTS(datos, 'edad');
5b. JSON_CONTAINS_PATH() - Verificar si una clave existe dentro de un objeto JSON
1SELECT JSON_CONTAINS_PATH('{"nombre": "Juan", "edad": 30}', 'one', '$.nombre');
6. JSON_MERGE_PATCH() - Fusionar JSON (Solo en MySQL)
Permite combinar dos objetos JSON en MySQL.
Ejemplo:
1SELECT JSON_MERGE_PATCH('{"nombre": "Juan"}', '{"edad": 30}');
Esto devuelve {"nombre": "Juan", "edad": 30}.
7. JSON_SET() - Modificar Valores en JSON
Permite actualizar valores dentro de un objeto JSON sin reescribir todo el contenido.
Ejemplo:
1SELECT JSON_SET('{"nombre": "Juan", "edad": 30}', '$.edad', 31);
8. JSON_REMOVE() - Eliminar Valores en JSON (Solo en MySQL)
Permite eliminar una clave específica dentro de un objeto JSON.
Ejemplo:
1SELECT JSON_REMOVE('{"nombre": "Juan", "edad": 30}', '$.edad');
Esto devuelve {"nombre": "Juan"}.
9. JSON_UNQUOTE() - Eliminar comillas JSON
Equivalente a "quitar las comillas de un string JSON"
Ejemplo:
1SELECT JSON_UNQUOTE('"Juan"'); -- Juan 2SELECT JSON_UNQUOTE(JSON_EXTRACT('{"nombre":"Juan"}', '$.nombre'));
10. JSON_LENGTH() - Devuelve el número de elementos
Devuelve el número de elementos de:
- Un array JSON
- Un objeto JSON (cuenta sus claves)
Ejemplo:
1SELECT JSON_LENGTH('["rojo", "verde", "azul"]'); -- Resultado: 3 2SELECT JSON_LENGTH('{"a":1,"b":2,"c":3}'); -- Resultado: 3 3SELECT JSON_LENGTH('{"persona": {"nombre": "Ana"}}', '$.persona'); -- 1