我之前从未使用过Informix,而且我正在尝试编写一个将在过去365天内返回记录的查询。
以下是我一直在尝试使用的查询:
Select * from Visit where vis_mod_dt between today-365 and today;
即使我知道过去365天有数据,也不会返回任何记录。我猜这个vis_mod_dt不是真正的日期列,虽然它显示为'12 / 31/1899'我试图使用以下方式来构建此列:
select * from visit where date(vis_mod_dt) between today-365 and today;
这仍然不会返回任何数据。
有什么想法吗?
答案 0 :(得分:2)
请注意,日期1899-12-31对应于零(0)的内部日期表示。也就是说,在内部,Informix将DATE值存储为4字节整数,并计算自1899-12-31以来的天数,因此第1天是1900-01-01(因为它知道1900年不是闰年,第60天是1900-03-01)。
这个事实让我担心你桌子里的东西。但是,如果表中的数据在请求时无法转换为DATE,通常会出错。
使用DB-Access和Info / Tables选项建立架构是明智的,或使用DB-Schema:
dbschema -d dbase -t visit
DB-Schema输出更适合添加到您的问题中。
如果有要选择的数据,使用'TODAY-365'和'TODAY'的查询表达式应该可以正常工作。
有一个环境变量DBDATE可能需要设置才能使工作正常 - 从字符串表示转换为日期。由于您可能位于英国(来自您的图标),因此您可能需要并且需要将DBDATE的值设置为:
export DBDATE=DMY4/
这表示日期包括日期,月份,4位数年份,“/”用作首选分隔符。对于美国格式,假设默认值通常为“MDY4 /”,您不会感到惊讶;我习惯性地使用'Y4MD-',因此我看到DATE值与DATETIME YEAR TO DAY相同,这是日期的ISO 8601:2004表示法。 (它有很多好处:它是明确的,天真的排序算法将这些日期排序为日期顺序。)IDS背景中实际上有很多机制(IBM Informix Dynamic Server - 我认为,这是你的DBMS使用;还有一些替代品也是Informix DBMS),这样通常可以正确转换具有2位数日期的字符串(但它们是不明确的和不合需要的),并且在输入时将识别除“/”之外的分隔符,但是斜杠将用于'输出'(将DATE转换为字符串时)。
如果这里没有帮助,那么我建议您编辑问题以包括:
如果您的表很大(很多列),请尝试选择关键列(vis_mod_dt
是目前最重要的列)。理想情况下,显示器中不需要任何滚动条。
确保您不包含任何敏感信息。
如果你注意我问你的问题,我会帮助你的。如果你不注意我提出的问题,我无法帮助你。请编辑您的问题,而不是将信息添加为“答案”。
什么是表架构?输出是什么:
SELECT t.tabid, t.tabname, c.colno, c.colname, c.coltype, c.collength
FROM "informix".systables AS t, "informix".syscolumns AS c
WHERE t.tabid = c.tabid
AND t.tabname = "visit"
ORDER BY t.tabid, c.colno;
你从中获得了什么:
SELECT TODAY, TODAY-365 FROM "informix".systables WHERE tabid = 1;
您是否设置了环境变量DBDATE?如果是这样,它的价值是什么?
注意:如果你不能复制'n'上面的查询,那么你可能不需要包含引用的'“informix”。系统目录中的属性;但是,如上所述,查询将适用于任何现存的Informix数据库 - OnLine 5.x,SE 5.x或7.x,IDS 7.x,XPS 8.x,IDS 9.x或10.x或11。 x - 和任何数据库模式(未记录,记录,MODE ANSI)。我使用JOIN表示法,除了一些旧版本不支持它 - 虽然你必须在非常旧的版本上才能成为一个问题。
答案 1 :(得分:0)
这有点令人困惑,因为当我运行以下内容时,我得到了数据:
从“10/01/2008”和“10/01/2009”之间的vis_mod_dt访问中选择计数(*)
答案 2 :(得分:0)
如何将表卸载到ascii文件,检查卸载的vis_mod_dt值以查看它们是否符合DBDATE = MDY4(mmddyyyy)格式?如果是,如果它不是DATE列,则ALTER vis_mod_dt为TYPE DATE,则重新加载已卸载的表。
:“BETWEEN今天-365和今天”SELECT语句的一部分适用于我的应用程序。