Tal y como comenté hace algunas semanas, hoy continuamos con SQL y Where, aplicado a fechas para importar datos a Excel desde Access. El archivo de ejemplo seguirá siendo el mismo que adjunté en el segundo artículo de esta serie, solo entren al enlace y descárguenlo: Enlace.
Lo primero es comentarle que cuando de fechas se trata, casi siempre hay complicaciones debido a que no es que todos los países usen el mismo tipo de formato; por ejemplo, en Perú el usado habitualmente es “dd/mm/yyyy” (entiéndase el “yyyy” como “aaaa”) pero en EE. UU. usan “mm/dd/yyyy”. Entonces, cuando usamos SQL ¿Cuál es el formato ideal? Pues sin duda yo les diría que es el siguiente: “yyyy-mm-dd” ¿Por qué? Porque SQL usa los estándares de la norma ISO 8601y respecto a fechas es la que les menciono. Entonces, por decirlo de un modo, con ese formato de fecha, no hay pierde.
Yendo al primer ejemplo, si queremos los datos de aquellas personas cuya fecha de nacimiento es menor al 01 de enero de 1978, basta colocar la sentencia de este modo:
sql = "SELECT * FROM Vendedores Where Nacimiento < #1978/01/01#"
Si se dan cuenta, coloqué la fecha en el formato que les mencioné previamente y he rodeado dicha fecha de almohadillas (#), eso último es importante para que el valor enviado se reconozca justamente como fecha. En nuestra hoja tendremos esto:
Ahora vamos más bien a obtener las fechas que son mayores al 01 de enero de 1978, es decir, aquellas posteriores. Basta cambiar el signo menor (<) por el signo mayor (>).
sql = "SELECT * FROM Vendedores Where Nacimiento > #1978/01/01#"
En esta ocasión tendremos esto en la hoja:
No olviden que también se puede usar el signo igual (=) junto con mayor o menor para tomar en cuenta la fecha que se usa en el criterio. Pero ¿qué pasas si lo que queremos obtener son los registros en un rango determinado de fechas? No hay problema, para eso tenemos a Between que es un operador que permite seleccionar valores entre un rango de datos, justamente. Between funciona del siguiente modo:
sql = "SELECT * FROM Vendedores Where Nacimiento BetWeen #1970-01-01# And #1979-12-01#"
Para ese caso, estamos seleccionado las fechas entre el 01 de enero de 1970 y el 01 de diciembre de 1979. Al correr la macro este será el resultado:
Ojo con el uso del “And” y que la fecha inicial siempre va primero. Si quieren ir un poquito más allá y ordenar por fecha de naciemiento, basta agregar la cláusula “Order By” que justaente ordena los registros de una consulta de forma ascendente (por defecto) o descendente. Si queremos agregar eso, se hace de la siguiente forma:
sql = "SELECT * FROM Vendedores Where Nacimiento BetWeen #1970-01-01# And #1979-12-01# Order by Nacimiento"
Si queremos los datos de forma descendente, basta agregar lo siguiente:
sql = "SELECT * FROM Vendedores Where Nacimiento BetWeen #1970-01-01# And #1979-12-01# Order by Nacimiento Desc"
No olviden tomar muy en cuenta que, después de la clausula Order By se agrega el nombre del campo por le cual se quiere ordenar y, de ser necesario, se agrega el “Asc” o “Desc” antes del nombre del campo. Amigos/as, en esta ocasión vamos a llegar hasta ahí, en el próximo artículo usaremos variables y datos de celdas para construir nuestra cadena SQL, así como seleccionaremos solo algunos de los campos de la tabla del archivo Access.
¡Hasta la próxima!
Abraham Valencia
Lima, Perú