db2 varchar 键解决方法

db2 varchar key workarounds

我开始理解不使用 varchar 进行键控的好处,如 here

所述

我正在使用一个我没有设置的 DB2 数据库,它有一个很大的 table(超过 2000 万行)和一个 varchar 键字段。 table 结构如下:

key_field | matching_field1  
000-XXX | 123  
0000-XXX | 456  
00-XXXXX | 789  

key_field是可变长度的。我正在尝试使用 key_field 到 link 到具有 4k 行的较小的 table。问题是 key_field 中的字符后有尾随 space。我知道这一点,因为如果我使用

搜索特定字符串

SELECT * WHERE key_field LIKE '000-XXX' 没有匹配项,但如果我尝试 '000-XXX%' 则该行被选中。我认为这与我无法键入第二个 table 的原因相同,它包含相应的 key_field 但已被修剪,因此没有尾随的白色 space。

假设我无法编辑、复制或转置这么大的 table(至少由于资源限制不能批量),有没有办法将它键控到较小的 table(4k 行) ) 包含相同的 key_field?

我可以编辑和操作较小的 table。

更新:运行 下面的查询使用 RTRIM,我收到一个错误。

查询:

SELECT RTRIM(foreign_key)  
FROM Small_Table  
EXCEPT SELECT RTRIM(key_field)  
FROM Big_Table

错误:

NUMBER OF ROWS DISPLAYED IS 0
SQLCODE = -904, ERROR:  UNSUCCESSFUL EXECUTION CAUSED BY AN
UNAVAILABLE RESOURCE. REASON 00C90084, TYPE OF RESOURCE 00000100, AND
RESOURCE NAME DB2-MANAGED SPACE WITHOUT SECONDARY ALLOCATION OR
USER-MANAGED SPACE IN MYDB_NAME

使用此命令加入您的表格

如果字符串末尾只有空格

rtrim(key_field)=rtrim(keyothertable)

如果字符串开头只有空格

ltrim(key_field)=ltrim(keyothertable)

如果字符串的开头 or/and 结尾有空格(解决方案 1)

trim(key_field)=trim(keyothertable)

如果字符串的开头 or/and 结尾有空格(解决方案 21)

strip(key_field)=strip(keyothertable)

在键上使用 "trim/rtrim/ltrim/strip" 函数时的缺点是可能没有使用索引(检查)

如果不使用索引,您能否将列键转换为 varchar...