2016-03-21 52 views
0

我有這樣的DB2表DB2 IF和長度使用

A  | B  | C 

aaaa |123  | 
bbbb |1  | 
cccc |123456 | 

所有列VARCHAR處理。我想讓列C填充B的內容,並與A的內容連接。 但C的最大長度是8.所以如果連接字符串超過8,那麼我想只有5個字符+ 「...」。

基本上是:

if(length(A) + length(B) > maximum(C) { 
     //display only the first (maximum(C) - 3) characters, then add "..." 
} else { 
    // display B + A 
} 

我怎麼能做到這一點的DB2?

+0

什麼背景?它是一個SELECT或INSERT語句,一個函數或存儲過程,還是......?你看過'CASE'嗎? –

回答

1

一個不錯的選擇是將列C定義爲生成的列,因此您不必處理任何內容。

create table t3 (A varchar(10), 
       B varchar(10), 
       C varchar(8) generated always as (case when length(concat(A, B)) > 8 then substr(concat(A,B),1,5) || '...' else concat(A, B) end) 
       ) 

insert into t3 (A,B) values ('This', ' is a test'); 
insert into t3 (A,B) values ('ABCD', 'EFGH'); 
select * from t3 

將返回

A   B   C   
---------------------------------- 
This   is a test This ... 
ABCD  EFGH  ABCDEFGH 

替代品可能是觸發器,過程,明確代碼等

+0

這聽起來像一個很棒的想法。謝謝! –