Sqlite 根据另一个列的值添加列
Sqlite add column based on another columns value
我在 SQLite 数据库中有一个 first_name 字段。
我想通过添加一个 first_initial 列来更改此数据库,并使其值成为 first_name 的第一个字符,后跟一个句点。
我将如何设置 first_initial 的值,可以从 alter 语句完成吗?
ALTER TABLE mytable ADD COLUMN first_initial TEXT;
据我所知,这不能作为 alter
语句的一部分来完成。但是,您可以在 alter
语句后跟一个 update
语句来初始化初始值:
UPDATE mytable SET first_initial = SUBSTR(first_name, 1, 1);
或者更好的是,如果 first_initial
始终是 first_name
的第一个字符,您根本不需要在 table 中使用它 - 您可以在需求,或者,如果您愿意,创建一个视图来检索它:
CREATE VIEW myview AS
SELECT *, SUBSTR(first_name, 1, 1) AS first_initial
FROM mytable
我认为这可能会为输入的任何新行执行您想要的操作(在添加列之后,就像您在 alter 语句中所做的那样)。它可能需要一些调整,所以这里是触发器的参考页面:http://www.sqlite.org/lang_createtrigger.html
CREATE TRIGGER mytable_first_initial_default_value
AFTER INSERT ON mytable
FOR EACH ROW
WHEN NEW.first_initial IS NULL
BEGIN
UPDATE mytable
SET first_initial = substring(NEW.first_name,1,1)
WHERE rowid = NEW.rowid;
END;
但是,我也倾向于说你真的不应该有一个包含相关信息的重复列,因为它增加的复杂性远远超过它的价值(在我看来)。
任何时候你需要得到第一个首字母,只需这样做:
SELECT substring(first_name,1,1) AS first_initial FROM mytable
我在 SQLite 数据库中有一个 first_name 字段。 我想通过添加一个 first_initial 列来更改此数据库,并使其值成为 first_name 的第一个字符,后跟一个句点。 我将如何设置 first_initial 的值,可以从 alter 语句完成吗?
ALTER TABLE mytable ADD COLUMN first_initial TEXT;
据我所知,这不能作为 alter
语句的一部分来完成。但是,您可以在 alter
语句后跟一个 update
语句来初始化初始值:
UPDATE mytable SET first_initial = SUBSTR(first_name, 1, 1);
或者更好的是,如果 first_initial
始终是 first_name
的第一个字符,您根本不需要在 table 中使用它 - 您可以在需求,或者,如果您愿意,创建一个视图来检索它:
CREATE VIEW myview AS
SELECT *, SUBSTR(first_name, 1, 1) AS first_initial
FROM mytable
我认为这可能会为输入的任何新行执行您想要的操作(在添加列之后,就像您在 alter 语句中所做的那样)。它可能需要一些调整,所以这里是触发器的参考页面:http://www.sqlite.org/lang_createtrigger.html
CREATE TRIGGER mytable_first_initial_default_value
AFTER INSERT ON mytable
FOR EACH ROW
WHEN NEW.first_initial IS NULL
BEGIN
UPDATE mytable
SET first_initial = substring(NEW.first_name,1,1)
WHERE rowid = NEW.rowid;
END;
但是,我也倾向于说你真的不应该有一个包含相关信息的重复列,因为它增加的复杂性远远超过它的价值(在我看来)。
任何时候你需要得到第一个首字母,只需这样做:
SELECT substring(first_name,1,1) AS first_initial FROM mytable