DB2 10 for Z/OS, SQL LIKE Column Value Plus Wildcard DB2 w/o loss stage 1

Posted

技术标签:

【中文标题】DB2 10 for Z/OS, SQL LIKE Column Value Plus Wildcard DB2 w/o loss stage 1【英文标题】:DB2 10 for Z/OS, SQL LIKE Column Value Plus Wildcard DB2 w/o losing stage 1 【发布时间】:2013-10-25 19:51:25 【问题描述】:

所以,这与 SQL LIKE Column Value Plus Wildcard DB2 有关,但操作系统的一个更具体的问题 b/c

所以,我想:

select a.columnA
       b.columnZ
from a
join table b
  on b.columnB LIKE a.columnA || '%'

b.columnB 是一个索引,我希望使用它来完成连接(b/c 它是一个巨大的表)。但遗憾的是 z/OS 不允许使用 LIKE 右侧的列。

从另一篇文章中,我意识到我可以使用 LOCATE,但它是一个标量函数,因此不符合第 1 阶段谓词的条件,因此我失去了索引的值。

【问题讨论】:

你的问题是? 您想要 B 中的所有行,其中 columnB 是 columnA 的 SUBSTR(从左侧开始)?如果它将 A 与 AA、AB、ABCDEFG、AZZZZ 等匹配,这是否正确?那么每个 b 行可以有很多 a 行吗? 【参考方案1】:

一种选择是使用范围谓词并将高值连接到范围高端的列值的末尾。这等价于 like 谓词:

select a.columnA
       b.columnZ
from a
join table b
  on b.columnB >= a.columnA 
 and b.columnB <  a.columnA || x'FF'

这是我们经常在我工作的地方经常使用的东西,以便能够在像这样的部分值匹配上使用索引。

【讨论】:

以上是关于DB2 10 for Z/OS, SQL LIKE Column Value Plus Wildcard DB2 w/o loss stage 1的主要内容,如果未能解决你的问题,请参考以下文章

DB2 v8 for z/OS 中的交叉连接

在 DB2 sql for z/os 中用 0 填充 smallint

我想使用 SQL for DB2 z/OS v9 计算模式中所有表中的记录

如何在 DB2 for Z/OS 中返回系统日期或日期时间?

对 DB2 for z/OS 的存储过程调用中不支持字符串文字

DB2 for z/OS:CURSOR FOR UPDATE 锁定行为