Oracle Text中Timestamp字段Facet Search查询的格式问题
解决Oracle Text SDATA查询TIMESTAMP字段的格式问题
针对你遇到的DRG-12246错误,核心原因是SDATA条件中传入的字符串格式与TIMESTAMP类型的SDATA段不兼容。Oracle Text对TIMESTAMP类型的SDATA字段,要求使用明确的TIMESTAMP类型值,而非纯数字格式的字符串。
正确的两种写法:
- 使用
TO_TIMESTAMP函数转换字符串为TIMESTAMP类型
SELECT * FROM TEST_USER_FT WHERE CONTAINS(ID,'SDATA(DATE_BIRTH > TO_TIMESTAMP(''2010-01-31 02:00:00'', ''YYYY-MM-DD HH24:MI:SS''))') > 0;
如果你的TIMESTAMP字段包含小数秒,需要在格式中加入.FF(比如.FF3表示三位小数秒):
SELECT * FROM TEST_USER_FT WHERE CONTAINS(ID,'SDATA(DATE_BIRTH > TO_TIMESTAMP(''2010-01-31 02:00:00.000'', ''YYYY-MM-DD HH24:MI:SS.FF3''))') > 0;
- 使用Oracle标准TIMESTAMP字面量语法
SELECT * FROM TEST_USER_FT WHERE CONTAINS(ID,'SDATA(DATE_BIRTH > TIMESTAMP ''2010-01-31 02:00:00'')') > 0;
若涉及带时区的TIMESTAMP字段(TIMESTAMP WITH TIME ZONE),则使用带时区的字面量:
SELECT * FROM TEST_USER_FT WHERE CONTAINS(ID,'SDATA(DATE_BIRTH > TIMESTAMP ''2010-01-31 02:00:00 +00:00'')') > 0;
关键说明:
你之前使用的YYYYMMDDHH24MISS格式仅适用于DATE类型字段的SDATA查询,对于TIMESTAMP类型,必须确保传入的是TIMESTAMP类型的表达式,而非纯数字字符串,这样Oracle Text才能正确匹配SDATA段的类型,避免类型不兼容的错误。
内容的提问来源于stack exchange,提问作者Domenico
相关产品推荐
相关产品推荐

