2012-01-16 6 views
1

私はこれらの2つの以前の質問Question 1Question 2の組み合わせを使用して問題を解決しようとしました。データ列に別の列のデータと追加のキーワードを加えたもの

私の問題は、DB2の1つの列を、開始値と終了値を持つ別の列と同じに設定しようとしていることです。私はこれをS-ファーストを追加する2つのステップで行い、最後に2つ目のパスに-000を追加するオプションがありますが、現在MYSQLのようにDB2で作業していないCONCATの問題に取り組んでいます。

変換前

name | loc  | group 
----------------------------------- 
sam | 123  | 
jack | 456  | 
jill | 987  | 
mark | 456  | 
allen | 123  | 
john | 789  | 
tom | 123  | 

変換後

name | loc  | group 
----------------------------------- 
sam | 123  | S-123-000 
jack | 456  | S-456-000 
jill | 987  | S-987-000 
mark | 456  | S-456-000 
allen | 123  | S-123-000 
john | 789  | S-789-000 
tom | 123  | S-123-000 

私が使用しようとしていますSQL:

UPDATE table 
SET GROUP = CONCAT('S-',LOC,'-000') 
WHERE LENGTH(RTRIM(LOC)) = 3 

すべてのヘルプや指導をいただければ幸いです。

答えて

1

DB2 CONCATには2つの引数しかないので、目的の結果を得るために入れ子にすることができます。

UPDATE table 
SET GROUP = CONCAT(CONCAT('S-',LOC),'-000') 
WHERE LENGTH(RTRIM(LOC)) = 3 
+0

に空白を望んでいないし、ちょうどそれを再試行し、私が受けています: ""がSQLステートメントのリテラル文字列の場合は、意図したとおりに長すぎます です。 – em3ricasforsale

+0

@ em3ricasforsale 'loc'列と' group'列のデータ型は何ですか? –

+0

よろしくお願いします。彼らは2つの異なるサイズですが、最終的には同じサイズであっても問題になりました。問題は余分なスペースがあって、それぞれの新しい値がカラムのサイズよりも大きいことです。助けていただきありがとうございます。 – em3ricasforsale

1

連結演算子:||

は、しかし、いくつかは、あなたがLOCフィールドが長い3以上であるなら、それを

UPDATE table 
SET GROUP = 'S-'||LOC||'-000' 
WHERE LENGTH(RTRIM(LOC)) = 3 

を使用しないことをお勧めします、あなたは、私がしようとした

UPDATE table 
SET GROUP = 'S-'||RTRIM(LOC)||'-000' 
WHERE LENGTH(RTRIM(LOC)) = 3 
+0

ダブルバーの使用に対する推奨事項は、EBCDICの '|'文字が* variant *であることが主な原因です。その場合、 'CONCAT'演算子は' || '演算子の同等の同義語として存在します。例えば、 '' S- '|| RTRIM(LOC)||' -000 ''という表現は、 '' S- 'CONCAT RTRIM(LOC)CONCAT' -000''のように書くことができます。任意の演算子のバリアント文字。 – CRPence

関連する問題