VBA - 在SQL查询中使用日期变量而不是GETDATE()

时间:2017-08-10 19:57:25

标签: excel vba

我有一个使用GETDATE()作为日期引用的查询,它可以收集年龄范围内的数据。 但是,我想使用浮动DATE参考点,以便从提供的(年/月/日)日期而不是当前日期时间计算年龄

如何在下面的WHERE子句之后更改查询中的GETDATE(),以便在aYar中使用变量日期来获取我的年龄范围?

注意:使用SQL查询将数据从PostGres数据集提取到Excel 2010中

Dim sAge As Integer
    sAge = ThisWorkbook.Sheets("INPUT").Range("B5")    'AGE FROM
Dim eAge As Integer
    eAge = ThisWorkbook.Sheets("INPUT").Range("C5")    'AGE TO
Dim aDate As String
    aDate = ThisWorkbook.Sheets("INPUT").Range("D5")   'CALC AGE USING THIS DATE
    aYear = Format(aDate, "dd/mm/yyyy")

Dim abc As String
abc = "SELECT c.id, p.dob, [AGE NOW] = dbo.AGE(p.dob, GETDATE()) " _
    & "FROM table c INNER JOIN person p ON c.id=p.id " _
    & "WHERE ( dbo.AGE(p.dob, GETDATE()) >= " & [sAge] & " AND dbo.AGE(p.dob, GETDATE()) <= " & [eAge] & " ) " _

Set rs = conn.Execute(abc)
With ActiveSheet.QueryTables.Add(Connection:=rs, Destination:=Range("A1"))
    .Refresh
End With

rs.Close

1 个答案:

答案 0 :(得分:0)

dbo.AGE(p.dob, GETDATE())更改为dbo.AGE(p.dob, '" & aYear & "')

请注意,当您连接字符串时,您不包含引号,因此您必须在双引号周围包装单引号,以便它们存在于字符串中。

需要考虑的是,您将日期作为字符串传递,因此如果您连接的日期不是Postgres&#34;不喜欢的格式&#34 ;你可以看到问题。在测试输出时要记住一些事项。