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