如果日期在当前月份之前,则将日期转换为当月的第一个月

时间:2014-03-19 17:01:58

标签: sql ms-access iif

我在一个列中有一个IIF()表达式的查询,我用它来确定日期是否在当前月份之前,然后再修改它。因此,如果我在19th March 2014上运行查询且EffFrom日期在2014年3月1日之前,我希望该列条目现在显示为1st March 2014

我正在使用下面的表达式,它几乎正在做我想要的,但是我知道它不考虑年份 - 即它正在将1st Jan 2015的条目更改为1st March 2014。< / p>

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

有人可以为我纠正这个表达吗?

2 个答案:

答案 0 :(得分:3)

我解释了&#34;如果我在2014年3月19日运行查询并且efffrom日期是在2014年3月1日之前,我希望该列条目现在显示为2014年3月1日&#34; 表示你想从今天的查询(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;

答案 1 :(得分:0)

这是我为了下个月的第一天所做的工作

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