我试图检查一个日期是否大于另一个日期。这是我使用的公式:
=if(
Date(PYMT_DT, 'MM/dd/yyyy') >= Date($(Var_StartDate), 'MM/dd/yyyy')
AND
Date(PYMT_DT, 'MM/dd/yyyy') <= Date($(Var_EndDate), 'MM/dd/yyyy')
,1,0)
PYMT_DT是我查询中的字段。 Var_StartDate和Var_EndDate是变量。
公式始终返回0.但是,如果我直接在公式中键入日期,它可以正常工作。
让我们使用这些值作为示例:
PYMT_DT = 10/21/2016
Var_StartDate = 10/20/2016
Var_EndDate = 10/30/2016
那应该给我1,但我得到0。但是,如果我用实际日期值替换PYMT_DT,我会得到正确的结果:
=if(
Date('10/21/2016', 'MM/dd/yyyy') >= Date($(Var_StartDate), 'MM/dd/yyyy')
AND
Date('10/21/2016', 'MM/dd/yyyy') <= Date($(Var_EndDate), 'MM/dd/yyyy')
,1,0)
我在这里做错了什么?
答案 0 :(得分:0)
第一点是格式,它需要是大写'MM/DD/YYYY'
。第二点是您需要Date#
函数将文本转换为日期(Date
仅更改日期或数字的格式)。第三点是你的变量需要用'$(variable)'
包裹,可以将变量的值解释为值,而不是变量。
对于变量,建议使用MakeDate
创建一个日期。
下面的代码可以粘贴并运行
LET Var_StartDate = MakeDate(2016, 10, 20);
LET Var_EndDate = MakeDate(2016, 10, 30);
DATA:
LOAD
PYMT_DT,
if(Date#(PYMT_DT, 'MM/DD/YYYY') >= '$(Var_StartDate)' AND Date#(PYMT_DT, 'MM/DD/YYYY') <= '$(Var_EndDate)', 1, 0) as test
Inline [
PYMT_DT
10/19/2016
10/21/2016
11/01/2016];
答案 1 :(得分:0)
如果您的日期很可能包含时间成分,则还需要确保floor()
进行比较,否则可能是时间问题。以及使用正确的格式等,这可能会导致:
=if(
floor(Date#(PYMT_DT, 'MM/DD/YYYY')) >= floor(Date#('$(Var_StartDate)', 'MM/DD/YYYY'))
AND
floor(Date#(PYMT_DT, 'MM/DD/YYYY')) <= floor(Date#('$(Var_EndDate)', 'MM/DD/YYYY'))
,1,0)