我有一个问题,这个查询不起作用:
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不是很熟悉,有人可以帮助我吗?
答案 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中?