2012-01-16 22 views
1

我已經嘗試使用這兩個前面的問題的組合Question 1Question 2來幫助我解決我的問題。更新數據列與另一列的數據加上一個額外的關鍵字

我的問題是我想在DB2中設置一列等於另一列的開始和結束值。我可以選擇這樣做,分兩步進行:首先添加S-,然後第二遍添加-000,但我目前遇到了CONCAT在DB2中不像在MYSQL中那樣工作的問題。

轉換前

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只接受兩個參數,因此您可以將它們嵌套以實現所需的結果。

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

我試過,只是說重試,我接受:如果「」是SQL語句中的一個文字字符串,則它的預期用途也是 。 – em3ricasforsale 2012-01-16 20:24:32

+0

@ em3ricasforsale「loc」和「group」列的數據類型是什麼? – 2012-01-16 20:26:44

+0

好的電話。它們是兩種不同的尺寸,但即使尺寸相同,最終也會是這個問題。問題是他們有額外的空間,而且每邊的新值都大於列大小。謝謝你的幫助。 – em3ricasforsale 2012-01-16 20:38:46

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 2016-08-11 16:24:56

相關問題