mysql - Excel ODBC 链接到 SQL 查询以获取日期之间的结果
问题描述
我在 Windows 10 Pro 计算机上运行 Excel 2016。我已经建立了从 Excel 到外部 MariaDB SQL 数据库的 ODBC 连接。我的 VBA 宏主要按我想要的方式工作,但我在选择两个日期之间的记录时遇到问题。此 SQL 语句有效:
SELECT Date_Time, ChargerSt FROM `MyDBx`.`table` WHERE (Date_Time>{ts '2019-06-01 00:00:00'}) ORDER BY Date_Time;
但是,我无法使用;获得任何WHERE
子句组合。BETWEEN date1 AND date2
以上结合Date_Time<{ts '2019-06-11 00:00:00'}
工作。Date_Time
SQL 数据库中的格式为yyyy-mm-dd
.
我正在输入这样的日期:
firstdate = InputBox("Enter starting date (yyyy-mm-dd)")
seconddate = Format((DateValue(firstdate) - 7#), "yyyy-mm-dd")
SQL 语句的 VBA 代码如下所示
"SELECT Date_Time, ChargerSt FROM `MyDBx`.`table` " _
& "WHERE (Date_Time>{ts '" & firstdate & " 00:00:00'})" & " ORDER BY Date_Time"
这可能真的很简单,只表明我缺乏 SQL 经验,但我正在努力去做和学习。
解决方案
当您解决了您的情况时,请考虑 ODBC 连接中的参数化,这是在 VBA 等应用层运行 SQL 的首选方式。使用参数化可以避免连接或标点符号的需要,并且建议在 VBA(例如 Java、Python、PHP)或 MariaDB(Oracle、SQL Server、Postgres)之外的一般编程行业中使用。
下面假设您在 Excel 中使用 ADO 并在模块上运行后期绑定。
Public Sub RunSQL()
Dim firstdate As Date, seconddate As Date
Dim sql as String, conn As Object, cmd As Object, rst As Object
Const adCmdText = 1, adParamInput = 1, adDate = 7
firstdate = DateValue(InputBox("Enter starting date (yyyy-mm-dd)"))
seconddate = firstdate - 7
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
conn.Open "Driver={MySQL ODBC 5.3 Unicode Driver};host=hostname;" _
& "database=databasename;UID=username;PWD=****"
' PREPARED STATEMENT (NO DATA)
sql = "SELECT Date_Time, ChargerSt FROM `MyDBx`.`table` WHERE `DateTime` BETWEEN ? AND ?"
' CONFIGURE ADO COMMAND
Set cmd = CreateObject("ADODB.Command")
With cmd
.ActiveConnection = conn
.CommandText = sql
.CommandType = adCmdText
' BIND DATE VALUES
.Parameters.Append .CreateParameter("start_param", adDate, adParamInput, , firstdate)
.Parameters.Append .CreateParameter("start_param", adDate, adParamInput, , seconddate)
' CREATE RECORDSET
Set rst = .Execute
End With
'... USE RECORDSET
rst.Close
Set rst = Nothing: Set cmd = Nothing: Set conn = Nothing
End Sub
推荐阅读
- jquery - 我如何在不使用相同代码的情况下简化此代码,范围外的变量不适用于“开始,结束,天”
- python - 在Python中将对象数组连接到字符串值
- r - 将带有时间戳的字符日期转换为“POSIXct”“POSIXt”类
- php - 如何用str_replace()插入x个段落
- c# - 将枚举列表转换为 SelectList 并保持显示?
- sql - 将列数据对从 csv 导入 sql
- html - Textarea 背景与 IE 上的占位符背景图像冲突
- angular - Angular 8 Spinner 组件 - 使用服务加载
- c - 写入到 mmapped 内存中的某个位置后,之后打印出来时,不再写入
- mysql - mysql查询错误