db2 varchar 键解决方法
db2 varchar key workarounds
我开始理解不使用 varchar 进行键控的好处,如 here
所述
我正在使用一个我没有设置的 DB2 数据库,它有一个很大的 table(超过 2000 万行)和一个 varchar 键字段。 table 结构如下:
key_field | matching_field1
000-XXX | 123
0000-XXX | 456
00-XXXXX | 789
key_field
是可变长度的。我正在尝试使用 key_field
到 link 到具有 4k 行的较小的 table。问题是 key_field
中的字符后有尾随 space。我知道这一点,因为如果我使用
搜索特定字符串
SELECT * WHERE key_field LIKE '000-XXX'
没有匹配项,但如果我尝试 '000-XXX%'
则该行被选中。我认为这与我无法键入第二个 table 的原因相同,它包含相应的 key_field
但已被修剪,因此没有尾随的白色 space。
假设我无法编辑、复制或转置这么大的 table(至少由于资源限制不能批量),有没有办法将它键控到较小的 table(4k 行) ) 包含相同的 key_field
?
我可以编辑和操作较小的 table。
更新:运行 下面的查询使用 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)
如果字符串的开头 or/and 结尾有空格(解决方案 1)
trim(key_field)=trim(keyothertable)
如果字符串的开头 or/and 结尾有空格(解决方案 21)
strip(key_field)=strip(keyothertable)
在键上使用 "trim/rtrim/ltrim/strip" 函数时的缺点是可能没有使用索引(检查)
如果不使用索引,您能否将列键转换为 varchar...
我开始理解不使用 varchar 进行键控的好处,如 here
所述我正在使用一个我没有设置的 DB2 数据库,它有一个很大的 table(超过 2000 万行)和一个 varchar 键字段。 table 结构如下:
key_field | matching_field1
000-XXX | 123
0000-XXX | 456
00-XXXXX | 789
key_field
是可变长度的。我正在尝试使用 key_field
到 link 到具有 4k 行的较小的 table。问题是 key_field
中的字符后有尾随 space。我知道这一点,因为如果我使用
SELECT * WHERE key_field LIKE '000-XXX'
没有匹配项,但如果我尝试 '000-XXX%'
则该行被选中。我认为这与我无法键入第二个 table 的原因相同,它包含相应的 key_field
但已被修剪,因此没有尾随的白色 space。
假设我无法编辑、复制或转置这么大的 table(至少由于资源限制不能批量),有没有办法将它键控到较小的 table(4k 行) ) 包含相同的 key_field
?
我可以编辑和操作较小的 table。
更新:运行 下面的查询使用 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)
如果字符串的开头 or/and 结尾有空格(解决方案 1)
trim(key_field)=trim(keyothertable)
如果字符串的开头 or/and 结尾有空格(解决方案 21)
strip(key_field)=strip(keyothertable)
在键上使用 "trim/rtrim/ltrim/strip" 函数时的缺点是可能没有使用索引(检查)
如果不使用索引,您能否将列键转换为 varchar...