我开始理解不使用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…