0

here で説明されているように、キーイングにvarcharを使用しないことの利点を理解し始めています

varchar キー フィールドを持つ大きなテーブル (20M 行以上) を持つ、セットアップしていない DB2 データベースを使用しています。テーブル構造は次のとおりです。

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が含まれているがトリミングされているため、末尾の空白がない2番目のテーブルにキーを設定できないのと同じ理由だと思います。

この大きなテーブルを編集、複製、または転置できないと仮定すると (リソースの制限により、少なくとも一括ではない)、同じものを含む小さなテーブル (4k 行) にキーを設定する方法はありkey_fieldますか?

小さいテーブルを編集および操作できます。

更新: を使用して以下のクエリを実行する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
4

1 に答える 1

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に変換できますか...

于 2016-11-10T06:50:39.397 に答える