Db2 varchar键解决方案



我开始理解不使用varchar进行键输入的好处了,如下所述

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

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

使用这个命令来连接表

如果字符串

末尾只有空格
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…

相关内容

  • 没有找到相关文章

最新更新