Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utiliser la date dans la cellule Excel dans la clause BETWEEN dans la requête SQL

Au lieu de formater des valeurs comme des dates ou des chaînes dans la commande SQL, il est préférable d'utiliser ADODB.Parameter - dans ce cas, le chauffeur fera tout le travail pour vous. Vous n'avez pas à vous soucier des guillemets autour d'une chaîne, du formatage d'une date afin que la base de données la comprenne correctement (ce qui dépend fortement de la base de données, des paramètres régionaux, etc.). De plus, c'est une protection contre l'injection SQL. De plus, l'optimiseur de requête peut faire son travail beaucoup mieux car il obtient la même commande SQL à chaque fois et se souvient du plan d'exécution.

Inconvénient :le code get est un peu plus compliqué car vous devez impliquer une ADODB.command objet.

Dans votre instruction SQL, vous mettez un simple ? à l'endroit où vous voulez avoir un paramètre. Vous devez juste veiller à ce que les chiffres et la position de ? et paramètres correspondent.

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 Était un peu paresseux pour la gestion de la date, si vous avez des données exactement à minuit, vous obtiendrez trop de données.