【问题标题】: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。

标签: sql ms-access iif


【解决方案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")))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    相关资源
    最近更新 更多