查询两个字段中至少一个属于日期范围的地方(

时间:2019-03-15 12:42:10

标签: axapta x++

我有一个查询,该查询在包含两个ModifyBy日期的视图上运行。我需要返回这些日期中的任意一个落入指定范围内的所有记录。

从我研究过的所有内容来看,似乎我需要这样的东西:

    qbdsCustTableAddressView
        .addRange(fieldNum(TCMCustTableAddressView, CustTableModified))
        .value(
            strFmt("(%1>='%2' AND %1<='%3') || (%4>='%2' AND %4<='%3')",
                fieldstr(TCMCustTableAddressView, CustTableModified),
                DateTimeUtil::toStr(contract.parmFromDateTime()),
                DateTimeUtil::toStr(contract.parmToDateTime()),
                fieldstr(TCMCustTableAddressView, EBillModified),
                0
            )
        );

当我将结果查询与以下内容产生的结果进行比较时:

qbdsCustTableAddressView
    .addRange(fieldNum(TCMCustTableAddressView, CustTableModified))
    .value(strFmt("%1..%2", contract.parmFromDateTime(), contract.parmtoDateTime()));

然后上述看起来正确,因为我收到了一个非特定的“ 22附近的语法错误”

2 个答案:

答案 0 :(得分:1)

您在括号,单引号和使用AND而不是&&方面遇到一些问题。

这应该有效:

qbdsCustTableAddressView
    .addRange(fieldNum(TCMCustTableAddressView, CustTableModified))
    .value(
        strFmt("(((%1 >= %2) && (%1 <= %3)) || ((%4 >= %2) && (%4 <= %3)))",
            fieldstr(TCMCustTableAddressView, CustTableModified),
            DateTimeUtil::toStr(contract.parmFromDateTime()),
            DateTimeUtil::toStr(contract.parmToDateTime()),
            fieldstr(TCMCustTableAddressView, EBillModified),
            0
        )
    );

答案 1 :(得分:0)

尝试一下:

qbdsCustTableAddressView
    .addRange(fieldNum(TCMCustTableAddressView, CustTableModified))
    .value(SysQuery::range(contract.parmFromDateTime(), contract.parmtoDateTime()));

区别为SysQuery::range(<from>, <to>)

我看不到明显的问题,但是也许可以为您清除它。