SQL日期查询中的VBA变量

时间:2015-08-07 17:27:03

标签: sql vba date variables

我试图在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数据库中日期时间组的列名。知道我哪里错了吗?我已经尝试了过去几天我能找到的所有解决方案,但没有运气。提前谢谢。

3 个答案:

答案 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'"