Advantage数据库TIMESTAMPADD()在WHERE子句中报操作数错误求助
解决Advantage数据库TIMESTAMPADD与>运算符兼容问题
针对你遇到的[iAnywhere Solutions][Advantage SQL Engine]Invalid operand for operator: >错误,核心原因大概率是TIMESTAMPADD函数返回的TIMESTAMP类型与Journal.Date的DATE类型不匹配——虽然<运算符能触发隐式转换,但>运算符的类型校验更严格,导致报错。
给你几个可行的解决方案:
方案1:显式转换TIMESTAMPADD结果为DATE类型
将TIMESTAMPADD的返回值用CAST转为DATE类型,确保与Journal.Date的类型一致:
SELECT Maccount.SortName AS Customer, SUM(Journal.GLAmount) AS Billings FROM Journal INNER JOIN MAccount ON Journal.MAccountPkey=MAccount.MAccountPkey WHERE Journal.Type=150 AND Journal.Date > CAST(TIMESTAMPADD(SQL_TSI_YEAR,-1,CURDATE()) AS DATE) GROUP BY 1 ORDER BY 1,2;
方案2:改用Advantage原生DATEADD函数
Advantage数据库更推荐使用DATEADD函数处理日期偏移,它的返回类型会自动适配输入的日期类型,避免类型不兼容问题:
SELECT Maccount.SortName AS Customer, SUM(Journal.GLAmount) AS Billings FROM Journal INNER JOIN MAccount ON Journal.MAccountPkey=MAccount.MAccountPkey WHERE Journal.Type=150 AND Journal.Date > DATEADD(year, -1, CURDATE()) GROUP BY 1 ORDER BY 1,2;
验证思路
你可以单独执行SELECT TIMESTAMPADD(SQL_TSI_YEAR,-1,CURDATE())和SELECT CURDATE(),查看两者的返回类型差异。如果前者带时间戳(比如2023-10-05 00:00:00),后者是纯日期(2023-10-05),就说明类型不匹配是问题根源。
内容的提问来源于stack exchange,提问作者Ratguy
相关产品推荐
相关产品推荐

