一、提出以下问题:
表有日期字段:如:2010-01-25,……2012-12-21,2012-12-21,2013-01-20……
需要区间划分:如:2011-11-21至2011-12-20表示为201112,2012-12-21至2013-01-20日期间表达为201301,2013-01-21至2013-02-20日期间表达为201302,……,2013-11-21至2013-12-20日期间表达为201312,2013-12-21至2014-01-20日期间表达为201401,以此类推,如何使用函数或者查询表示!
二、煮江品茶 老师给出了答案,但是运行效率较低。
Function GetMyMonth(ByVal date0 As Date, ByVal D As Date) As String
'功能:返回工厂日历计算的月度
'参数:D --- 计算日期
'示例:select *,GetMyMonth(#1900/12/20#,[日期]) from tbname
Dim d0 As Date, d1 As Date
Dim str As String
d0 = date0
d1 = DateAdd("m", 1, d0)
str = ""
If d0 <= D Then
Do While (D >= d0 And D < d1) = False
d0 = d1
d1 = DateAdd("m", 1, d0)
Loop
str = Format(d1, "yyyymm")
End If
GetMyMonth = str
End Function
三、自己研究个,虽然不简洁,但是效率高些。
Function GetMyMonth1(ByVal D As Date) As String
'功能:返回工厂日历计算的月度
'参数:D --- 计算日期
'示例:select *,GetMyMonth([日期]) from tbname
Dim d0 As String, d1 As String
Dim str As String
str = ""
d0 = Format(D, "mmdd")
d1 = Format(D, "yyyy")
Select Case d0
Case "0101" To "0120"
str = d1 & "01"
Case "0121" To "0220"
str = d1 & "02"
Case "0221" To "0320"
str = d1 & "03"
Case "0321" To "0420"
str = d1 & "04"
Case "0421" To "0520"
str = d1 & "05"
Case "0521" To "0620"
str = d1 & "06"
Case "0621" To "0720"
str = d1 & "07"
Case "0721" To "0820"
str = d1 & "08"
Case "0821" To "0920"
str = d1 & "09"
Case "0921" To "1020"
str = d1 & "10"
Case "1021" To "1120"
str = d1 & "11"
Case "1121" To "1220"
str = d1 & "12"
Case "1221" To "1231"
str = Format(D, "yyyy") + 1
str = str & "01"
Case Else
str = "-"
End Select
GetMyMonth1 = str
End Function