在Excel VBA / SQL中查询数值

时间:2016-08-12 05:16:05

标签: sql excel vba excel-vba

因此,我从以下SQL查询中获取了所需参数错误的No值:

query = "SELECT *, DATEDIFF(DAY, [Target Completion Date], DATE()) AS Cert FROM [Project Status$] WHERE Cert < 20"

我尝试在过滤器值中添加引号(即:'20'),但我没有得到正确的值(显然)。如果我要删除WHERE子句,它查询就好了。最初,我打算做以下事情:

query = "SELECT * FROM [Project Status$] WHERE [Days to Target Date] < 20"

但是[天数到目标日期]列中的值是这样计算的,并且在有符号整数和字符串“完成”之间有所不同:

=IF(AD1="",IF(I1="","",J1-TODAY()),"Complete")

我无法使用WHERE [目标日期天数]&lt; 20,因为它抛出了数据不匹配错误,所以我选择进行DATEDIFF计算。谁知道这可能是什么情况?这是我目前正在使用的代码和the data

Sub GetData()
    On Error GoTo ErrorHandler

    Dim cnn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim conStr As String
    Dim wbFile As String

    Dim query As String
    Dim row As Long

    wbFile = Application.ActiveWorkbook.Path & "\Status Sheet.xlsx"
    conStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & wbFile & _
        "; Extended Properties=""Excel 12.0 Xml; HDR=YES; IMEX=1"";"
    query = "SELECT *, DATEDIFF(DAY, [Target Completion Date], DATE()) AS Cert" & _
            " FROM [Project Status$] WHERE Cert < 20"
    row = 2

    initSheet

    cnn.Open conStr
    rs.Open query, cnn, adOpenStatic, adLockOptimistic

    ...

ErrorHandler:
    cnn.Close
    Set rs = Nothing
End Sub

编辑:感谢winghei和Axel,最终得到了这个东西。这是有效的查询:

query = "SELECT * FROM [Project Status$] " & _
        " WHERE DATEDIFF(""d"", DATE(), [Target Completion Date]) < 20" & _
        " AND [Days to Target Date] <> ""Complete"" "
        " ORDER BY [Days to Target Date] ASC" 

1 个答案:

答案 0 :(得分:0)

尝试。或参见https://support.office.com/en-us/article/DateDiff-Function-e6dd7ee6-3d01-4531-905c-e24fc238f85f

  

SELECT * FROM [Project Status $] WHERE DATEDIFF(&#39; d&#39;,[Target Completion Date],DATE())&lt; 20