Mysql
 sql >> Database >  >> RDS >> Mysql

Usa la data nella cella di Excel nella clausola BETWEEN nella query SQL

Invece di formattare valori come date o stringhe nel comando SQL, è molto meglio usare ADODB.Parameter - in tal caso l'autista farà tutto il lavoro per te. Non devi preoccuparti delle virgolette attorno a una stringa, formattando una data in modo che il database la comprenda correttamente (che dipende fortemente dal database, dalle impostazioni regionali e così via). Inoltre è una protezione contro l'iniezione di SQL. Inoltre, Query Optimizer può fare il suo lavoro molto meglio perché ottiene sempre lo stesso comando SQL e ricorda il piano di esecuzione.

Svantaggio:code get è leggermente più complicato perché devi coinvolgere un ADODB.command oggetto.

Nella tua istruzione SQL, inserisci un semplice ? nel punto in cui vuoi avere un parametro. Devi solo fare attenzione che i numeri e la posizione di ? e i parametri corrispondono.

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

PS Era un po' pigro per la gestione della data, se hai dati esattamente a mezzanotte, otterresti troppi dati.