sql >> Database >  >> RDS >> Mysql

Gebruik datum in Excel-cel in BETWEEN-clausule in SQL-query

In plaats van waarden zoals datums of strings op te maken in de SQL-opdracht, is het veel beter om ADODB.Parameter te gebruiken. - in dat geval doet de chauffeur al het werk voor u. U hoeft zich geen zorgen te maken over aanhalingstekens rond een tekenreeks, een datum opmaken zodat de database deze correct begrijpt (wat sterk afhankelijk is van de database, regionale instellingen enzovoort). Bovendien is het een bescherming tegen SQL-injectie. Bovendien kan de query-optimizer zijn werk veel beter doen omdat hij elke keer hetzelfde SQL-commando krijgt en het uitvoeringsplan onthoudt.

Nadeel:code wordt iets ingewikkelder omdat je een ADODB.command moet gebruiken voorwerp.

In je SQL-statement zet je een simpele ? op de plaats waar u een parameter wilt hebben. Je moet er alleen voor zorgen dat de cijfers en de positie van ? en parameters komen overeen.

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 Was een beetje lui voor de datumafhandeling, als je gegevens precies om middernacht hebt, zou je te veel gegevens krijgen.



  1. Symfony:Er is een uitzondering opgetreden in stuurprogramma:kon stuurprogramma niet vinden met mysql

  2. Dagelijks actieve gebruikers (DAU) berekenen in MySQL

  3. hoe actieve records in de database te verwijderen met behulp van code igniter

  4. 12c Verouderde functies