[英]How to split a string into a new column in SQLite3 command line?
我正在使用以下.sql 腳本在 SQLite3 中構建一個簡單的表:
drop table if exists projects;
CREATE TABLE projects(
"project_number" TEXT,
"project_manager" TEXT
);
insert into projects ("project_manager", "project_number")
values ("Bob", "11204568-001");
insert into projects ("project_manager", "project_number")
values ("Bill", "11204568-002");
insert into projects ("project_manager", "project_number")
values ("Jack", "11204568-003");
insert into projects ("project_manager", "project_number")
values ("Jill", "11204000");
insert into projects ("project_manager", "project_number")
values ("Fred", "11204569");
insert into projects ("project_manager", "project_number")
values ("Nancy", "11204569-003");
然后,我使用alter table
語句向該表添加一個名為main_project_number
的列:
alter table projects add column "main_project_number" integer;
然后我想只用project_number_column
的前綴填充這個新列,這樣我就得到了這樣的結果:
project_number project_manager main_project_number
-------------------- --------------- -------------------
11204568-001 Bob 11204568
11204568-002 Bill 11204568
11204568-003 Jack 11204568
11204000 Jill 11204000
11204569 Fred 11204569
11204569-003 Nancy 11204569
因此,我嘗試了使用此處定義的一些 sqlite 字符串函數的update
語句:
update projects set main_project_number = (select substr("project_number", 0, instr("project_number", "-")) from projects);
然而,這產生了以下結果,這不是我想要的......:
project_number project_manager main_project_number
-------------------- --------------- -------------------
11204568-001 Bob 11204568
11204568-002 Bill 11204568
11204568-003 Jack 11204568
11204000 Jill 11204568
11204569 Fred 11204568
11204569-003 Nancy 11204568
我在這里做錯了什么?
更新應參考特定行:
update projects
set main_project_number =
CASE WHEN instr("project_number", "-") > 0
THEN substr("project_number", 0, instr("project_number", "-"))
ELSE "project_number"
END
如果您使用的是 SQLite 3.31.0 及更高版本,我建議使用生成的列以避免運行更新。
ALTER TABLE projects
ADD COLUMN main_project_number TEXT GENERATED ALWAYS AS
(CASE WHEN instr("project_number", "-") > 0
THEN substr("project_number", 0, instr("project_number", "-"))
ELSE "project_number"
END) VIRTUAL;
如果列 project_number 沒有前導0
,您可以這樣做:
update projects
set main_project_number = project_number + 0;
請參閱演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.