sql >> Base de Datos >  >> RDS >> Mysql

Use la fecha en la celda de Excel en la cláusula BETWEEN en la consulta SQL

En lugar de formatear valores como fechas o cadenas en el comando SQL, es mucho mejor usar ADODB.Parameter - en ese caso, el conductor hará todo el trabajo por usted. No tiene que preocuparse por las comillas alrededor de una cadena, formatear una fecha para que la base de datos la entienda correctamente (lo cual depende en gran medida de la base de datos, la configuración regional, etc.). Además, es una protección contra la inyección de SQL. Además, el optimizador de consultas puede hacer su trabajo mucho mejor porque obtiene el mismo comando SQL cada vez y recuerda el plan de ejecución.

Inconveniente:el código se vuelve un poco más complicado porque tiene que involucrar un ADODB.command objeto.

En su declaración SQL, pone un simple ? en el lugar donde desea tener un parámetro. Solo debes cuidar que los números y la posición de ? y coincidencias de parámetros.

Dim Conn As New ADODB.Connection, cmd As New ADODB.Command, param As ADODB.Parameter, rs As ADODB.Recordset
Conn.Open "<your connection string>"
Set cmd.ActiveConnection = Conn
cmd.CommandText = "SELECT cID FROM logistics WHERE DATE(insert_timestamp) BETWEEN ? AND ? GROUP BY 1"

Set param = cmd.CreateParameter(, adDate, adParamInput, , Date)
cmd.Parameters.Append param
Set param = cmd.CreateParameter(, adDate, adParamInput, , Date + 1)
cmd.Parameters.Append param

Set rs = cmd.Execute
Debug.Print rs.Fields(0).Name, rs(0).Value

PD Fue un poco perezoso para el manejo de la fecha, si tiene datos exactamente a la medianoche, obtendría demasiados datos.