使用 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
我有一个名为 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