使用sql查询在Access中填充日期列,其中包含从1980-01-01到今天的日期

时间:2015-02-02 12:47:22

标签: sql ms-access access-vba

我有一个名为日期的访问表,并且有一个名为Date的列(格式化为日期)。我需要将日期从1980-01-01到今天在列中一次增加1天。 1980-01-01将在第一排。

如何使用SQL查询完成此操作?

2 个答案:

答案 0 :(得分:3)

如果您有合适的数字表,可以使用Access SQL添加这些日期。

INSERT INTO dates ([Date])
SELECT CDate(n.the_number)
FROM tblNumbers AS n
WHERE n.the_number BETWEEN 29221 AND 42037;

或者从 tblNumbers 中的1开始,添加偏移量...

INSERT INTO dates ([Date])
SELECT CDate(n.the_number + 29220)
FROM tblNumbers AS n
WHERE n.the_number BETWEEN 1 AND 12817;

但是如果你没有合适的数字表,你需要创建一个并填充它。这类似于您开始时遇到的问题,只加载普通数字而不是日期。

原始任务很简单,我会使用一次性VBA过程而不是Access SQL。这个用日期表加载所需的12,817日期值的时间不到2秒:

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim dte As Date
Set db = CurrentDb
Set rs = db.OpenRecordset("dates", dbOpenTable, dbAppendOnly)
With rs
    For dte = #1/1/1980# To Date
        .AddNew
        ![Date].Value = dte
        .Update
    Next
    .Close
End With

答案 1 :(得分:2)

首先,将您的列重命名为其他内容,然后重命名为Date,因为它是一个保留字,会给您带来很多麻烦。在我的示例中,我将列命名为DateField

我假设当你说sql查询时,你的意思是访问sql,在这种情况下它无法完成,因为访问sql不支持循环。

但是,您可以通过VBA轻松完成,请参阅以下内容:

Sub Main()
    Dim myDate As Date
    Dim myDateString As String
    Dim strSQL As String

    myDate = #1/1/1980#

    Do While myDate < Now
        myDateString = Format(myDate, "yyyy-mm-dd")

        strSQL = "INSERT INTO DateTable (DateField) VALUES(#" & myDate & "#)"

        CurrentDb.Execute strSQL

        myDate = myDate + 1
    Loop
End Sub