我在Excel工作表中有大约10000条记录(虽然我可以更容易导入Access 2010),如果日期介于某些种植季节之间,我需要在单独的列中设置一个值。年份无关紧要。
因此,如果日期介于某个范围之间,则该栏填写适当的种植季节。
Spring = 3/16 - 5/15
Summer 5/16-8/15
Fall 8/15-10/31
Everything else is Null
3/20/2015 and 4/16/2013 are both "Spring" in the seasons column
6/28/2011 and 8/1/2015 are both Summer, etc.
关于如何做到这一点的想法?正如我所说,我可以在Excel或Access中执行此操作,无论哪种方法都更容易。
答案 0 :(得分:2)
您可以在Access查询中使用DateSerial Function。例如,您种植日期的春季可以表示为......
planting_date BETWEEN DateSerial(Year(planting_date), 3, 16) AND DateSerial(Year(planting_date), 5, 15)
您可以在Switch表达式中使用类似的模式来确定每个planting_date
的种植季节......
SELECT
y.planting_date,
Switch
(
y.planting_date BETWEEN DateSerial(Year(y.planting_date), 3, 16) AND DateSerial(Year(y.planting_date), 5, 15), 'spring',
y.planting_date BETWEEN DateSerial(Year(y.planting_date), 5, 16) AND DateSerial(Year(y.planting_date), 8, 15), 'summer',
y.planting_date BETWEEN DateSerial(Year(y.planting_date), 8, 16) AND DateSerial(Year(y.planting_date), 10, 31), 'fall',
True, Null
) AS season
FROM YourTable AS y;
如果您想将这些季节值存储在名为 planting_season 的字段中,请在Switch
查询中使用UPDATE
表达式...
UPDATE YourTable AS y
SET y.planting_season =
Switch
(
y.planting_date BETWEEN DateSerial(Year(y.planting_date), 3, 16) AND DateSerial(Year(y.planting_date), 5, 15), 'spring',
y.planting_date BETWEEN DateSerial(Year(y.planting_date), 5, 16) AND DateSerial(Year(y.planting_date), 8, 15), 'summer',
y.planting_date BETWEEN DateSerial(Year(y.planting_date), 8, 16) AND DateSerial(Year(y.planting_date), 10, 31), 'fall',
True, Null
);
答案 1 :(得分:1)
此公式假设第一个日期在单元格A1中。在单元格B1中输入公式(或从第1行输入另一个空单元格):
=CHOOSE(MATCH(A1-DATE(YEAR(A1),1,0),{0;75;136;227;305},1),"","Spring","Summer","Fall","")
现在尽可能向下复制。
那就是它。
注意:这可以通过计算一年中的日期来计算,例如3月16日是一年中的第75天。一年中的一天'计算出一个简单的二进制匹配,对应于您的种植季节的天数数组。最后,CHOOSE函数用于将MATCH结果转换为季节名称。
要修改种植时间表,只需调整一年中的这几天即可。 array:{0; 75; 136; 227; 305}
注意:这是一个非常有效的自包含公式。不需要外部辅助列,也没有嵌套或其他的IF函数。
附录:这是一个变体,其中有一个处理闰年的条款:
=CHOOSE(MATCH(A1-DATE(YEAR(A1),1,0),{0;75;136;227;305}+(2=MONTH(DATE(YEAR(A1),2,29))),1),"","Spring","Summer","Fall","")
答案 2 :(得分:0)
提取月份和日期的一些帮助列很有用(假设值在A1:A1000处):
B1 =
MONTH(A1)
C1 =DAY(A1)
D1 =DATE(2000, B1, C1)
我们故意"欺骗"关于更容易比较的一年。
在那之后,这里没什么特别的,只有很多嵌套的if
:
IF(AND(D1 >= DATE(2000, 3, 16), D1 <= DATE(2000, 5, 15)), "Spring",
IF(AND(D1 >= DATE(2000, 5, 16), D1 <= DATE(2000, 8, 15)), "Summer",
IF(AND(D1 >= DATE(2000, 8, 16), D1 <= DATE(2000, 10, 31)), "Fall", "Winter")))