gpt4 book ai didi

mysql - Excel ODBC 链接到 SQL 查询以获取日期之间的结果

转载 作者:行者123 更新时间:2023-11-29 09:41:30 24 4
gpt4 key购买 nike

我在 Windows 10 专业版计算机上运行 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的格式在 yyyy-mm-dd 的 SQL 数据库中.

我输入的日期如下:

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 并在模块上运行后期绑定(bind)。

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

关于mysql - Excel ODBC 链接到 SQL 查询以获取日期之间的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56556791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com