[英]How to split a string into a new column in SQLite3 command line?
I am constructing a simple table in SQLite3 using the following.sql script:我正在使用以下.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");
I then add a column to this table called main_project_number
using the alter table
statement:然后,我使用
alter table
语句向该表添加一个名为main_project_number
的列:
alter table projects add column "main_project_number" integer;
I would then like to populate this new column with only the prefix of the the project_number_column
, such that I get a result like this:然后我想只用
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
So I tried an update
statement with some sqlite string functions as defined here :因此,我尝试了使用此处定义的一些 sqlite 字符串函数的
update
语句:
update projects set main_project_number = (select substr("project_number", 0, instr("project_number", "-")) from projects);
This produced the following result, however, which is not what I want...:然而,这产生了以下结果,这不是我想要的......:
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
What am I doing wrong here?我在这里做错了什么?
Update should refer to specific row:更新应参考特定行:
update projects
set main_project_number =
CASE WHEN instr("project_number", "-") > 0
THEN substr("project_number", 0, instr("project_number", "-"))
ELSE "project_number"
END
If you are using SQLite 3.31.0 and above I suggest to use generated columns to avoid running update.如果您使用的是 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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.