0

我开始了解不使用 varchar 进行键控的好处,如此处所述

我正在使用一个我没有设置的 DB2 数据库,它有一个带有 varchar 键字段的大表(20M+ 行)。表结构如下:

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

key_field是可变长度的。我正在尝试使用key_field链接到具有 4k 行的较小表。问题是 . 中的字符后有尾随空格key_field。我知道这一点,因为如果我使用搜索特定字符串

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

假设我不能编辑、复制或转置这个大表(由于资源限制至少不能全部),有没有办法将它键入包含相同的较小表(4k 行)key_field

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

更新:使用 运行下面的查询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
4

1 回答 1

1

使用此命令加入您的表

如果字符串末尾只有空格

rtrim(key_field)=rtrim(keyothertable)

如果字符串开头只有空格

ltrim(key_field)=ltrim(keyothertable)

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

trim(key_field)=trim(keyothertable)

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

strip(key_field)=strip(keyothertable)

当您在键上使用“trim/rtrim/ltrim/strip”功能时,缺点是可能没有使用索引(检查)

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

于 2016-11-10T06:50:39.397 回答