访问数据库字符串到日期转换问题

时间:2018-06-16 06:12:07

标签: ms-access ms-access-2010

我有一大堆使用手动输入的访问查询。 I.E.当查询运行时,会弹出一个类似START-DATE的内容,然后弹出另一个END-DATE。

数据库标准是:

between [START-DATE] AND [END-DATE]

开始日期和结束日期始终是上个月的第一天和上个月的最后一天。

我想用计算版本替换标准,因此不需要输入,但列定义为6个字符,格式为YYMMDD。

我已经陷入困境,过度思考这个问题,例如

"如果当前月份是1月份呢?" 或者"我如何处理30/31/29天的月份?"

使用Access条件是否有一个简单的解决方案?

任何帮助总是受到赞赏!

4 个答案:

答案 0 :(得分:0)

我将要使用的逻辑如下:

  1. 使用Date()获取当前日期。
  2. 使用DateSerial将其作为当月的第一天。
  3. 上个月的最后一天:减去1天。对于上个月的第一天,减去1个月。
  4. 当月的第一天:DateSerial(Year(Date), Month(Date), 1)

    上个月的第一天:DateAdd('m', -1, DateSerial(Year(Date), Month(Date), 1))

    上个月的最后一天:DateAdd('d', -1, DateSerial(Year(Date), Month(Date), 1))

    现在,您可以将其格式化为字符串,并比较字符串,但更好的方法是将该列强制转换为日期(除非您有索引,否则将这些日期格式化为字符串会更快) :

    DateSerial(Left(MyColumn, 2), Mid(MyColumn, 3, 2), Right(MyColumn, 2))
    Between 
        DateAdd('m', -1, DateSerial(Year(Date()), Month(Date()), 1)) 
        And DateAdd('d', -1, DateSerial(Year(Date()), Month(Date()), 1))
    

    这应该处理你投掷的任何事情:闰年,1月,短月等等。

答案 1 :(得分:0)

在条件中使用Like

Like Format(Date(), "YYMM") & "*"

上个月,请将Date()替换为Date()-Day(Date())

答案 2 :(得分:0)

DateSerial和一点点数学会做到:

FirstDayPreviousMonth: DateSerial(Year(Date()), Month(Date()) - 1, 1)
LastDayPreviousMonth: DateSerial(Year(Date()), Month(Date()), 0)

因此,如果您的日期字段是DateTime:

Between DateSerial(Year(Date()), Month(Date()) - 1, 1) And DateSerial(Year(Date()), Month(Date()), 0)

如果你是

  

6个字符,格式为YYMMDD

表示该字段包含Text,您应该更改它。始终将日期作为真实日期值处理。如果它只是字段的格式,那没关系。

对于文本字段,只需格式化日期值:

Between Format(DateSerial(Year(Date()), Month(Date()) - 1, 1), "\'yymmdd\'") And Format(DateSerial(Year(Date()), Month(Date()), 0), "\'yymmdd\'")

或使用Patrick的方法:

Like Format(DateAdd('m', -1, Date()), "\'yymm*\'")

答案 3 :(得分:0)

我的解决方案是三个响应中的两个的组合,因为它们中的每一个都没有返回所需的结果:

Like Left(Format(DateSerial(Year(Date()),Month(Date())-1,1),"yymmdd"),2) & Format(DateAdd('m',-1,Date()),"mm") & "*"

这适用于所有月份,并返回上个月的所有日期

Eric的解决方案也很不错,当我将其修改为包含格式时,它也给了我想要的结果,并且也适用于所有月份。

Between Format(DateAdd('m',-1,DateSerial(Year(Date()),Month(Date()),1)),"yymmdd") And Format(DateAdd('d',-1,DateSerial(Year(Date()),Month(Date()),1)),"yymmdd")