Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Use data na célula do Excel na cláusula BETWEEN na consulta SQL


Em vez de formatar valores como datas ou strings no comando SQL, é muito melhor usar ADODB.Parameter - nesse caso, o motorista fará todo o trabalho para você. Você não precisa se preocupar com aspas em torno de uma string, formatando uma data para que o banco de dados a entenda corretamente (o que depende muito do banco de dados, das configurações regionais e assim por diante). Além disso, é uma proteção contra injeção de SQL. Além disso, o otimizador de consulta pode fazer seu trabalho muito melhor porque obtém o mesmo comando SQL todas as vezes e lembra o plano de execução.

Desvantagem:o código fica um pouco mais complicado porque você precisa envolver um ADODB.command objeto.

Em sua instrução SQL, você coloca um simples ? no local onde você deseja ter um parâmetro. Você só precisa tomar cuidado para que os números e a posição de ? e parâmetros coincidem.
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. Estava um pouco preguiçoso para o manuseio de datas, se você tiver dados exatamente à meia-noite, obteria muitos dados.