MS Access 2003。
我需要获取位于 start_date 范围内的日期数组到 end_date 。 我没有在MS Access的标准集中找到这样的功能。
我写VBA功能:
Option Compare Database
' © Andrey Bushman, 2014
' Get the array of dates which are located in the range start_date to end_date.
' The result is an array of Date items.
Public Function GetDays(start_date As Date, end_date As Date)
If start_date > end_date Then
' end_date can't be less than start_date.
GetDays = Null
Exit Function
End If
Dim size As Long
size = end_date - start_date
Dim result() As Date
ReDim result(size) ' including the range boundaries.
Dim index As Long
index = 0
Dim day As Date
day = start_date
Do While day <= end_date
result(index) = day
day = day + 1
index = index + 1
Loop
GetDays = result
End Function
我的SQL查询:
SELECT tbChecks.CheckId, tbChecks.[In], tbChecks.Back, GetDays([In],[Back]) AS DayItem FROM tbChecks;
但是我在每个记录的 DayItem 字段中都会收到 #Error 文本。
这也不行:
SELECT GetDays(CDate("01.01.2014"), CDate("05.01.2014")) as DayItem;
我收到错误:条件表达式中的数据类型不匹配。 (错误3464)。
我该如何解决?
答案 0 :(得分:1)
您收到错误是因为您的VBA函数返回了Date
值的数组,但Access数据库引擎没有Array
字段类型。即使它确实如此,你最终会得到一行包含日期数组的行(根据对问题的评论),你希望每个日期都在一个单独的行中。
如果你创建一个&#34;数字&#34;你应该能够在不使用VBA的情况下完成你的目标。具有从0到足够大的值的连续整数值的表,例如,
n
----
0
1
2
3
...
998
999
1000
然后使用这样的查询:
SELECT DateAdd("d",n,#2014-01-01#) AS DayItem
FROM Numbers
WHERE n <= DateDiff("d",#2014-01-01#,#2014-01-05#)
返回
DayItem
----------
2014-01-01
2014-01-02
2014-01-03
2014-01-04
2014-01-05