有下表:
CREATE TABLE `foo`(
`year` INT NOT NULL,
`month` INT NOT NULL,
`day` INT NOT NULL,
`hour` INT NOT NULL,
`minute` INT NOT NULL,
`value` INT NOT NULL,
PRIMARY KEY(`year`, `month`, `day`, `hour`, `minute`)
);
我想编写一个查询,为每条记录添加2列:date
用于标准单列数据表示,weekday
表示每周的数字。
我试过了
SELECT
`year`, `month`, `day`, `hour`, `minute`, `value`,
substr('000' || year, -4) || '-' || substr('0' || month, -2) || '-' || substr('0' || day, -2) AS `date`,
strftime('%w', `date`) AS `weekday`
FROM
`foo`;
但是这说
Error: no such column: date
这是一个例子。实际上,我在计算其他列时有更复杂的逻辑,需要重用这些计算列来计算其他列,只需在每个地方复制整个代码,我需要它的值看起来非常可怕。
有没有办法计算另一个计算列值?
答案 0 :(得分:1)
使用子查询:
select f.*, strftime('%w', `date`) AS `weekday`
from (SELECT `year`, `month`, `day`, `hour`, `minute`, `value`,
substr('000' || year, -4) || '-' || substr('0' || month, -2) || '-' || substr('0' || day, -2) AS `date`
from foo
) t