如果日期早于当前月份,则将日期转换为当前月份的第一天

Posted

技术标签:

【中文标题】如果日期早于当前月份,则将日期转换为当前月份的第一天【英文标题】:Convert date to first of current month if date is previous to current month 【发布时间】:2014-03-19 17:01:58 【问题描述】:

我在一个列中有一个带有IIF() 表达式的查询,我用它来识别日期是否早于当前月份,如果是,则对其进行修改。因此,如果我在 19th March 2014 上运行查询并且 EffFrom 日期在 2014 年 3 月 1 日之前,我希望该列条目现在显示为 1st March 2014

我正在使用下面的表达式,这几乎可以满足我的要求,但是我知道它没有考虑到这一年——即将1st Jan 2015 的条目更改为1st March 2014

EffFrom: 
IIf(Month([Table.Efffrom])"Less than symbol"Month(Date()),Date()-Day(Date())+1,[Table.Efffrom])

谁能帮我改正这个表达方式?

【问题讨论】:

我试图更改您的标题以更清晰。我希望它是正确的,并说明了你想要做什么。 这是关于将 Efffrom 从前几个月的日期转换为当月的第一天吗? "Less than symbol" 的目的是什么? ...这应该意味着实际的< 字符吗? 嗨,斯曼多利。不幸的是,这不是我想要达到的。我希望当前月份之前的所有 Efffrom 日期都显示为当前月份的第一天。 嗨 HansUp,是的,这就是我想要的。是的,它应该是 @RosscoP,我喜欢你的新头衔。 +1。 【参考方案1】:

我解释了 “如果我在 2014 年 3 月 19 日运行查询并且生效日期在 2014 年 3 月 1 日之前,我希望该列条目现在显示为 2014 年 3 月 1 日” 表示您想要一些东西就像今天(2014 年 3 月 19 日)运行的查询一样:

id Efffrom   adjusted_date
 1  1/1/2014      3/1/2014
 2  3/1/2014      3/1/2014
 3 3/31/2014     3/31/2014
 4  1/1/2015      1/1/2015

如果正确,您的IIf 表达式可以使用DateSerial 来检查Efffrom 是否在本月的第一天之前,并转换较早的日期。

SELECT
    y.id,
    y.Efffrom,
    IIf
        (
            y.Efffrom < DateSerial(Year(Date()), Month(Date()), 1),
            DateSerial(Year(Date()), Month(Date()), 1),
            y.Efffrom
        ) AS adjusted_date
FROM YourTable AS y;

【讨论】:

行了!我遇到过 Date Serial 但不太明白。谢谢。【参考方案2】:

这是我为获得下个月的第一天所做的事情

EffFrom: DateAdd("m",1,CDate(Format([Table.Efffrom],"m/\1/yy")))

【讨论】:

以上是关于如果日期早于当前月份,则将日期转换为当前月份的第一天的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中如何获得指定日期中月份的第一天是周几?

如何计算当前日期是当年的第几周

Python之计算当前月份的日期范围(calendardatetime)

使用 VBA 在 Access 表中插入当前月份的每个日期记录

sql Oracle SQL:返回当前月份第一天的字符串(如果其他月份为ar,则替换SYSDATE的任何日期字段/值

Android中日期函数Calendar的一些用法和注意事项