Sqlite

取一列,將其拆分為新列

  • June 24, 2018

範例表:

 ID    CB        CB2   CB3   CB4  
 ----  --------  ----  ----  ---- 
 1     亀 龜 龜
 2     竜 龒 

注意:每個字元用空格隔開。注意:CB 中的字元數會有所不同。

我想將 CB 列中的每個字元(在第一個字元之後)移動到它自己的單獨列,以便每列中不超過一個字元。

像這樣:

 ID    CB    CB2   CB3   CB4    
 ----  ----  ----  ----  ----
 1      亀    龜    龜
 2      竜    龒

(SQLite)

使用最大字元大小為 3 sqllite(Web) 的 CB 列範例,只是展示如何拆分字元。

  CREATE TABLE TABLE1 (ID number,CB text(3),CB2 text(1),CB3 text(1),CB4 text(1));

INSERT INTO TABLE1 VALUES(1,'ABC','','','');
INSERT INTO TABLE1 VALUES(2,'DE','','','');

 select id,
CASE  
WHEN LENGTH(CB) >= 1 THEN SUBSTR(CB,1,1) 
END CB,

CASE    
WHEN LENGTH(CB) >= 2 THEN SUBSTR(CB,2,1) 
END CB2,

CASE    
WHEN LENGTH(CB) >= 3 THEN SUBSTR(CB,3,1) 
END CB3

from
table1

注意:不是解決方案,您可以從這個想法中解決。

在同一張桌子上更新

  --table creation
CREATE TABLE TAB1 (ID integer,CB text(5),CB1 text(1),CB2 text(1),CB3 text(1),CB4 text(1));
--- Insert sample rows  
INSERT INTO TAB1 VALUES(1,'ABCDE','','','','');
INSERT INTO TAB1 VALUES(2,'DE','','','','');
INSERT INTO TAB1 VALUES(3,'KLM','','','','');

---update rows
 UPDATE tab1
 SET
   cb  = CASE WHEN length(cb) > 1  THEN substr(cb,1,1)  END,
   cb1 = CASE WHEN length(cb) >= 2  THEN substr(cb,2,1) END,
   cb2 = CASE WHEN length(cb) >= 3  THEN substr(cb,3,1) END,
   cb3 = CASE WHEN length(cb) >= 4  THEN substr(cb,4,1) END,
   cb4 = CASE WHEN length(cb) >= 5  THEN substr(cb,5,1) END   
 WHERE id IN ( SELECT id FROM tab1);

如果您有兩個表,只需通過 id(inner) 連接並使用 case 語句更新目標表

引用自:https://dba.stackexchange.com/questions/210438