【发布时间】:2014-06-15 02:59:02
【问题描述】:
我有一个问题,这个查询不起作用:
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
这个没有子查询的查询返回正确的结果。
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 不是很熟悉,有人可以帮助我吗?
【问题讨论】:
-
这实际上不是 DB2 问题,no RDBMS 本身就支持这一点。发生的事情是 db 仍然将子查询视为返回一个长字符串,这当然与任何 id 都不匹配。您需要动态 SQL 来解析以前的查询结果、要加载到的
SESSION表、要为您扩展它的 UDF,或者可能需要基于确切平台的其他选项。 Here's a sample expanding function 为应该具有适应性的 SQL Server 编写。请注意,查询困难是您不应该这样存储数据的原因之一。 -
您使用的是哪个 DB2 服务器?用于 IBM i、z/OS 或 LUW 的 DB2?