DB2:包含clob字段上的强制转换运算符的子查询的问题

时间:2014-04-29 09:02:21

标签: sql casting db2 subquery

我有一个问题,这个查询不起作用:

select count(*)
from MYTABLE where
MYFIELD in (select trim(cast(CLOBFIELD as varchar(20000))) from TABLE2) ;
=>0 rows

子查询返回右结果:

select trim(cast(CLOBFIELD as varchar(20000))) from TABLE2 ; 
=>1202,1203,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1226

此查询没有子查询返回正确的reusults。

select count(*)
from MYTABLE where
MYFIELD in (1202,1203,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1226) ;

列CLOBFIELD是CLOB字段VS该列是char(4)字段。 在我看来,这是子查询中的一个演员问题,因为在clob字段上的强制转换。我不知道出了什么问题,我对DB2不是很熟悉,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

正如上面的评论所说,乱用像这样的大型数据类型是不对的,但这里有一些代码可以尝试:

select count(*)
from MYTABLE 
where LOCATE_IN_STRING((select ','||trim(cast(CLOBFIELD as varchar(20000)))||',' from TABLE2), ','||trim(MYFIELD)||','  ) > 0  ;

如果您的值包含逗号,则可能会出现问题。

也许您可以调查应用文字搜索索引? http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.ts.doc%2Fdoc%2Ft_creatingafulltextindex.html

但是,如果您需要访问CLOB中的值,可能它们不应该在CLOB中?