我试图在SQL数据库中查询日期在用户输入日期之后的所有行。我遇到了各种各样的错误"错误的语法附近"当我用"#" to"算术溢出错误将表达式转换为"。我目前的代码如下:
inputdate = InputBox("Please enter the starting date (mm/dd/yyyy)")
Debug.Print inputdate
querydate = "(DTG > " & Format(inputdate, "MMDDYYYY") & ")"
select StationID, DTG, CeilingFeet from SurfaceOb where " & querydate & " and StationID = 'NZWD'"
DTG是SQL数据库中日期时间组的列名。知道我哪里错了吗?我已经尝试了过去几天我能找到的所有解决方案,但没有运气。提前谢谢。
答案 0 :(得分:1)
SQL Server的日期应格式化为日期或日期/时间,使用单引号限定:
ISO未分离日期格式 日期querydate = "(DTG > '" & Format(inputdate, "yyyymmdd") & "')"
ISO 8601格式日期/时间
querydate = "(DTG > '" & Format(inputdate, "yyyy-mm-ddThh:mm:ss.000") & "')"
答案 1 :(得分:1)
主要问题是日期必须用单引号括起来。这是一个完整的工作示例(减去一个有效的连接字符串),它应该解释如何实现您的目标。请注意,您还需要切换到ISO日期格式,其中订单为年 - 月 - 日(YYYY-MM-DD
)。
Sub UpdateRecords()
Dim connection As New ADODB.connection
Dim recordset As New ADODB.recordset
Dim connectionString As String
Dim query As String
Dim inputdate As Date
Dim querydate As String
inputdate = InputBox("Please enter the starting date (mm/dd/yyyy)")
querydate = "(DTG > '" & Format(inputdate, "yyyy-mm-dd") & "')"
query = "select StationID, DTG, CeilingFeet from SurfaceOb where " & querydate & " and StationID = 'NZWD'"
connectionString = "..."
connection.Open connectionString
recordset.Open query, connection
ActiveSheet.Range("A1").CopyFromRecordset recordset
End Sub
答案 2 :(得分:0)
MySQL的日期格式为YYYY-MM-DD。
此外,由于DTG是日期时间,因此您需要DATE(DTG) > DATE(NOW())
- DATE()是一个MySQL函数,它只检查日期时间戳的日期部分。
您的查询应如下所示:
querydate = "(DATE(DTG) > " & Format(userinput, "YYYY-MM-DD") & ")"
select StationID, DTG, CeilingFeet from SurfaceOb where " & querydate & " and StationID = 'NZWD'"