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