IBM FileNet中能否仅用日期值查询DateTime字段?
在IBM FileNet中使用纯日期值查询的解决方案
没问题,IBM FileNet是支持纯日期值查询的,你之前的语句没生效,多半是没踩对它的ECQL(Enterprise Content Query Language)对日期类型的处理规则。我给你拆解下解决方案和排查点:
1. 先确认字段类型
首先得搞清楚你的EstimatedDate字段是DATE类型还是TIMESTAMP类型:
- 如果是DATE类型:字段只存储年-月-日,没有时分秒信息;
- 如果是TIMESTAMP类型:字段包含完整的时间戳(年-月-日 时:分:秒.毫秒),这也是你用TIMESTAMP语句能生效的原因。
2. 对应字段类型的正确查询写法
情况一:字段是DATE类型
直接用DATE 'yyyy-MM-dd'的字面量格式就能正常查询,比如你之前写的语句其实是对的,如果没生效可能是语法解析或者时区问题,可以再试一次:
-- 精确匹配某一天 SELECT * FROM Table_Name WHERE EstimatedDate = DATE '2017-03-02' -- 小于等于某一天的范围查询 SELECT * FROM Table_Name WHERE EstimatedDate <= DATE '2017-03-02'
情况二:字段是TIMESTAMP类型
因为TIMESTAMP包含时分秒,直接用纯日期字符串对比会匹配不到(除非记录的时间刚好是00:00:00.000),这时候有两种优雅的写法:
方法A:提取日期部分对比
用DATE()函数把TIMESTAMP字段转换成DATE类型,再和纯日期值对比:
-- 精确匹配当天所有记录 SELECT * FROM Table_Name WHERE DATE(EstimatedDate) = DATE '2017-03-02' -- 小于等于当天的所有记录 SELECT * FROM Table_Name WHERE DATE(EstimatedDate) <= DATE '2017-03-02'
方法B:指定当天的时间范围
如果你的ECQL版本不支持DATE()函数,就把纯日期转换成当天的起始和结束TIMESTAMP,用BETWEEN来匹配:
SELECT * FROM Table_Name WHERE EstimatedDate BETWEEN TIMESTAMP '2017-03-02T00:00:00.000Z' AND TIMESTAMP '2017-03-02T23:59:59.999Z'
3. 排查之前语句失效的常见原因
- 时区不匹配:如果你的TIMESTAMP语句用了
Z(UTC时区),但字段存储的是本地时区时间,纯DATE写法可能默认用服务器时区,导致匹配不上。可以尝试明确指定时区:SELECT * FROM Table_Name WHERE EstimatedDate <= DATE '2017-03-02' AT TIME ZONE 'UTC' - ECQL版本限制:部分旧版本的FileNet ECQL对DATE字面量的支持有限,试试去掉
DATE关键字,直接用带单引号的日期字符串(不过这种写法兼容性不如标准格式):SELECT * FROM Table_Name WHERE EstimatedDate <= '2017-03-02'
内容的提问来源于stack exchange,提问作者sn879
相关产品推荐
相关产品推荐

