You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Informix中为DATETIME列创建适配date()函数的索引

Informix中为datetime列的日期部分创建可用于查询的索引

你遇到的-674错误是因为Informix不允许直接在函数索引中使用date()函数,需要改用Informix支持的、可被索引的日期转换表达式。以下是两种可行的解决方案:

方案一:直接创建基于日期转换表达式的函数索引

Informix支持将datetime类型通过CAST转换为DATE类型,或者用EXTEND函数截断到YEAR TO DAY(即日期部分),这两种表达式都可以用于创建函数索引:

方式1:使用CAST转换为DATE

CREATE INDEX idx_pdt_gen_date ON patient_details_tbl(CAST(generated_date AS DATE)) ONLINE;

方式2:使用EXTEND截断日期部分

CREATE INDEX idx_pdt_gen_date ON patient_details_tbl(EXTEND(generated_date, YEAR TO DAY)) ONLINE;

创建索引后,需要调整查询语句的过滤条件,让它和索引的表达式完全匹配,这样查询优化器才能正确使用该索引:
对应CAST的查询:

SELECT 
    patient_id, patient_name 
FROM 
    patient_details_tbl 
WHERE 
    CAST(generated_date AS DATE) BETWEEN '2024-01-01' AND '2024-04-30';

对应EXTEND的查询:

SELECT 
    patient_id, patient_name 
FROM 
    patient_details_tbl 
WHERE 
    EXTEND(generated_date, YEAR TO DAY) BETWEEN '2024-01-01' AND '2024-04-30';

方案二:新增计算列并创建普通索引

如果不想修改原有查询语句,可以给表新增一个存储式计算列,专门存储日期部分,然后在这个列上创建普通索引:

  1. 添加计算列:
ALTER TABLE patient_details_tbl ADD COLUMN gen_date DATE GENERATED ALWAYS AS (CAST(generated_date AS DATE)) STORED;
  1. 创建索引:
CREATE INDEX idx_pdt_gen_date ON patient_details_tbl(gen_date) ONLINE;

之后你可以直接用这个新列进行查询,或者优化器会自动匹配原查询中的日期转换逻辑(建议统一使用新列以确保索引生效)。

注意:你的查询语句中写的是generated_time,但表结构里的列名是generated_date,需要先统一列名避免语法错误。

内容的提问来源于stack exchange,提问作者Shangeetha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 12:52:22