Sqlite根据另一列值添加列

时间:2015-09-21 16:32:29

标签: sql sqlite ddl calculated-columns alter

我在SQLite数据库中有一个first_name字段。 我想通过添加first_initial列来更改此数据库,并使其值成为first_name的第一个字符,后跟一个句点。 我如何设置first_initial的值,是否可以从alter statement?

完成
ALTER TABLE mytable ADD COLUMN first_initial TEXT;

2 个答案:

答案 0 :(得分:2)

据我所知,这不能作为alter声明的一部分。但是,您可以使用alter语句跟进update语句以初始化初始值:

UPDATE mytable SET first_initial = SUBSTR(first_name, 1, 1);

或者更好的是,如果first_initial始终是first_name的第一个字符,您根本不需要它 - 您可以根据需要查询它,或者,如果您首选,创建一个视图来检索它:

CREATE VIEW myview AS
SELECT *, SUBSTR(first_name, 1, 1) AS first_initial
FROM   mytable

答案 1 :(得分:1)

我认为这可能会对输入的任何新行执行您想要的操作(在您的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