我有一个名为日期的访问表,并且有一个名为Date的列(格式化为日期)。我需要将日期从1980-01-01到今天在列中一次增加1天。 1980-01-01将在第一排。
如何使用SQL查询完成此操作?
答案 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