db2 varchar关键解决方法

时间:2016-11-09 21:38:28

标签: sql db2 trim varchar db2-zos

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

我正在使用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但是已被修剪,因此没有尾随的空格。

假设我无法编辑,复制或转置此大型表(至少由于资源限制而无法集中),是否有办法将其键入包含相同key_field的较小表(4k行)?

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

更新:使用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

1 个答案:

答案 0 :(得分: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 ...