Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwenden Sie das Datum in der Excel-Zelle in der BETWEEN-Klausel in der SQL-Abfrage

Anstatt Werte wie Datumsangaben oder Zeichenfolgen in den SQL-Befehl zu formatieren, ist es viel besser, ADODB.Parameter zu verwenden - In diesem Fall erledigt der Fahrer die gesamte Arbeit für Sie. Sie müssen sich nicht um Anführungszeichen um eine Zeichenfolge kümmern und ein Datum so formatieren, dass die Datenbank es richtig versteht (was stark von der Datenbank, den regionalen Einstellungen usw. abhängt). Außerdem ist es ein Schutz vor SQL-Injection. Außerdem kann der Abfrageoptimierer seine Arbeit viel besser erledigen, da er jedes Mal denselben SQL-Befehl erhält und sich an den Ausführungsplan erinnert.

Nachteil:Der Code wird etwas komplizierter, da Sie einen ADODB.command einbeziehen müssen Objekt.

In Ihre SQL-Anweisung fügen Sie ein einfaches ? ein an der Stelle, an der Sie einen Parameter haben möchten. Sie müssen nur darauf achten, dass die Zahlen und die Position von ? und Parameter übereinstimmen.

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

P.S. War etwas faul für die Datumsverwaltung, wenn Sie Daten genau um Mitternacht haben, würden Sie zu viele Daten erhalten.