Archivo de la categoría ‘SQL’

Insertar NULL en CSV para importarlo desde PHPMyadmin hacia MySQL

Lunes, 28 de Diciembre de 2009

Siguiendo con la importación de un Excel hacia Mysql, tenemos el problema de que los campos que no se han rellenado se insertan como “” (cadena vacía) o como 0 (cero) según sean texto o números lo que estamos insertando.

Bien, si queremos que se guarde un NULL debemos insertar el siguiente carácter: \N

Como en la anterior entrada, simple pero efectivo.

Quitar espacios entre números o palabras en excel (o calc)

Lunes, 28 de Diciembre de 2009

En una migración desde Excel a Mysql tenemos el problema de que en un campo numérico obtenemos espacios, y el entero se nos trunca. Lo que debería ser: 93 222 2222 se guarda como: 93 es decir, se trunca por el primer espacio que encuentra.

La manera más cómoda de solucionar este problema que he encontrado ha sido seleccionar la columna en cuestión y hacer un buscar/reemplazar de un espacio por nada.

Una vez hecho podemos guardar como CSV e importar desde phpmyadmin a nuetra base de datos mysql. Simple pero efectivo.

Conectar Database Explorer de eclipse-aptana con SQL Server

Miércoles, 9 de Septiembre de 2009

Pasos para conectar correctamente:

  • Bajar el driver JDBC de MSSQL.
  • Abrir la perspectiva de Database Explorer(Window > Open Perspective > Other … > Database Explorer).
  • Para agregar una nueva cionexión: click derecho sobre databases, en la ventana de database explorer, y presionar add…
  • Escribir el nombre de la conexión.
  • En los detalles de conexión click sobre Add.
    1. Escribir un nombre para el driver.
    2. Click sobre Add File y examina el driver descargado en el paso 1.
    3. En la información de conexión selecciona el driver encontrado.
  • La cadena de conexión a establecer es la siguiente:
    jdbc:sqlserver://NOMBRE_HOST:PUERTO;DatabaseName=NOMBRE_DB
  • Establecer el nombre de usuario y contraseña para conectar a la base de datos.

Con estos pasos debería conectar a MSSQL y mostrarte todo su contenido desde la prespectiva de aptana database explorer.

Fuente:blog.jorgeivanmeza.com

NOTA

A partir de la versión 1.5 de aptana parece que deja de funcionar lo de subir un driver personalizado en el database explorer.

En el caso de tener la 1.5 os podeis bajar el programa ‘MyEclipse’ que parece ser que lleva un buen database explorer de serie.

Dos LEFT JOIN a una misma tabla de Mysql

Lunes, 2 de Marzo de 2009

Tengo dos tablas Mysql llamadas 'Producto' y 'Persona'. Cada producto almacenado en la tabla 'Producto' está asociado a solo un proveedor (o a ninguno) y a un solo cliente (o a ninguno). La información completa tanto de los clientes como de los proveedores se almacena en la tabla 'Persona'. De esta forma, en la tabla 'Producto' dispongo de dos campos INT, llamados 'idCliente' e 'idProveedor' respectivamente, ambos relacionados mediante una FOREIGN KEY hacia la misma tabla 'Persona'.

A la hora de mostrar información de productos me interesa no sólo mostrar el número identificativo de cada proveedor y de cada cliente asociados a un producto ('idProveedor' e 'idCliente'), si no que, por ejemplo, deseo mostrar nombre y apellidos de éstos. Al realizar la consulta SQL necesito crear dos LEFT JOIN puesto que, como se ha comentado anteriormente, en ocasiones puede ser que no tengamos cliente y/o proveedor asociados al producto.

El problema que tenía es que los dos LEFT JOIN deben referirse hacia la misma tabla ('Persona') y surge la necesidad de diferenciarlos de alguna forma. La solución es la siguiente:

SQL:
  1. SELECT Concat(Cliente.nombre,' ',Clienteapellidos) AS 'cliente', Concat(Proveedor.nombre,' ',Proveedor.apellidos) AS 'proveedor'
  2.  
  3. FROM  Producto
  4.  
  5. LEFT JOIN Persona Cliente (Cliente.idPersona = Producto.idCliente)
  6.  
  7. LEFT JOIN Persona Proveedor (Proveedor.idPersona = Producto.idProveedor)
  8.  
  9. WHERE 1

Como se puede observar en el ejemplo, el único requisito exigible para conseguir el objetivo expuesto es poner un alias justo detrás del nombre de la tabla en la sentencia LEFT JOIN.

Consulta SQL para manejar intervalos de campos tipo fecha

Lunes, 4 de Agosto de 2008

Tenemos una tabla Mysql que contiene información sobre pedidos. Ésta dispone, entre otros, de un campo fecha del tipo datetime con la fecha y la hora en las que se registra cada pedido. Otro campo, del tipo int, determina el identificador del estado en que se halla cada pedido. Estamos interesados en realizar un script php para consultar cada día esta tabla y eliminar (o en nuestro caso, cambiarlos de estado) todos los pedidos realizados hace más de 7 días que todavía no hayan sido pagados. Es decir, el campo identificador del estado nos dará la información del pago.

La consulta SQL realizada es la siguiente:

UPDATE `Pedido` SET `idEstado` = '5' WHERE (`idEstado` = 2) AND (`fecha` < DATE_SUB(CURDATE(), INTERVAL 7 DAY))

Con esta consulta UPDATE simplemente estamos actualizando el estado de los pedidos que se hallan en estado 2 (estado pendiente de pago) y que el campo fecha indica que fueron registrados anteriormente al periodo comprendido entre la fecha actual y los últimos 7 días. Los registros que cumplen estas condiciones pasarán a estado 5 (estado de cancelado, descartado o anulado).

Como se puede observar, ha sido preciso utilizar la función de Mysql DATE_SUB. Esta función necesita dos argumentos: una fecha de inicio y un parámetro de intervalo de tiempo para establecer un período pasado a partir de la fecha de inicio. Si se desea hacer lo mismo pero haciendo que el intervalo sea futuro a partir de la fecha de inicio (en vez de pasado) existe la función análoga la cual se llama DATE_ADD y precisa exactamente de los mismos argumentos. Esta función nos ha permitido efectuar operaciones de comparación con fechas.

En nuestro caso particular los parámetros que le hemos pasado a la función han sido:

  • fecha de inicio: CURDATE(). Esta función devuelve la fecha actual.
  • intervalo: INTERVAL 7 DAY. Instrucción que configura el intervalo.

Para ver como configurar el argumento del intervalo y conocer más detalles de estas dos funciones podéis hacer click aquí.

Si queréis ver como disparar automáticamente en el servidor un script php podéis consultar la entrada ejecutar diariramente un fichero PHP mediante crontab + wget.