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

Populate Date Column in Access with dates from 1980-01-01 to today with sql query

我有一个名为 dates 的 Access Table 并且只有一个名为 Date 的列(格式为 date )。我需要将列中从 1980-01-01 到今天的日期每次增加 1 天。 1980-01-01 将在第一行。

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

首先,将您的列重命名为其他名称,然后 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

如果您有 suitable table 个数字,您可以使用 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;

但是如果您没有 suitable 号码 table,则需要创建一个并填充它。这与您开始遇到的问题类似,只加载纯数字而不是日期。

最初的任务非常简单,我会使用一次性 VBA 过程而不是 Access SQL。这一次用不到 2 秒的时间加载了我的 dates table 所需的 12,817 个日期值:

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