无法根据 Informix 中的日期过滤器过滤记录

Posted

技术标签:

【中文标题】无法根据 Informix 中的日期过滤器过滤记录【英文标题】:Not able to filter records based on date filter in Informix 【发布时间】:2016-09-22 10:12:41 【问题描述】:

我想对 Informix 查询添加过滤器:

WHERE agentstatedetail.eventdatetime < '1753-01-01 00:00:00' - INTERVAL(3) DAY TO DAY

但它失败了...... 请说出哪里出错了。

【问题讨论】:

稍后我会试验一下您使用的符号有何变化,但使用 DATETIME(1753-01-01 00:00:00) YEAR TO SECOND 应该会让您的节目重新上路。 【参考方案1】:

如评论中所述,解决方案是确保将字符串解释为DATETIME 值。简单的方法是使用 DATETIME 文字符号:

DATETIME(1753-01-01 00:00:00) YEAR TO SECOND

演示:

CREATE TABLE agentstatedetail
(
    eventdatetime DATETIME YEAR TO SECOND NOT NULL PRIMARY KEY,
    eventname VARCHAR(64) NOT NULL
);

INSERT INTO agentstatedetail VALUES('1752-12-25 12:00:00', 'Christmas Day, Noon, 1752');
INSERT INTO agentstatedetail VALUES('1752-12-31 12:00:00', 'New Year''s Eve, Noon, 1752');
INSERT INTO agentstatedetail VALUES('1753-01-01 12:00:00', 'New Year''s Day, Noon, 1753');

SELECT * FROM agentstatedetail WHERE agentstatedetail.eventdatetime < '1753-01-01 00:00:00' - INTERVAL(3) DAY TO DAY;

这是嵌入到最小 SELECT 语句中的原始 WHERE 子句。它产生错误:

SQL -1261: Too many digits in the first field of datetime or interval.

(注意:在问题中包含错误消息会很有帮助。)

这是查询的另一个版本,使用 DATETIME 文字:

SELECT * FROM agentstatedetail
    WHERE agentstatedetail.eventdatetime < DATETIME(1753-01-01 00:00:00) YEAR TO SECOND -
                                           INTERVAL(3) DAY TO DAY
;

样本数据的输出:

1752-12-25 12:00:00|Christmas DAY, Noon, 1752

我观察到计算的值是一个常数;您可以将代码重写为:

SELECT * FROM agentstatedetail
    WHERE agentstatedetail.eventdatetime < DATETIME(1752-12-29 00:00:00) YEAR TO SECOND

我怀疑该值是作为参数传递的。

或者,您可以将字符串转换为 DATETIME 值,您会得到相同的结果:

SELECT * FROM agentstatedetail
    WHERE agentstatedetail.eventdatetime < CAST('1753-01-01 00:00:00' AS DATETIME YEAR TO SECOND) -
                                           INTERVAL(3) DAY TO DAY
;

或:

SELECT * FROM agentstatedetail
    WHERE agentstatedetail.eventdatetime < '1753-01-01 00:00:00'::DATETIME YEAR TO SECOND -
                                           INTERVAL(3) DAY TO DAY

【讨论】:

以上是关于无法根据 Informix 中的日期过滤器过滤记录的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL 根据与其他记录的日期和时间差过滤记录

Jquery 数据表日期范围过滤器

查询根据发布日期过滤订单?

PHP/SQL - 如何过滤掉与另一个表的数据有冲突的记录?

使用两个未绑定的文本框按日期范围过滤表单记录

如何在 django 中按日期范围过滤记录?