如何在SQLite查询中处理计算列值?

时间:2012-12-13 14:22:56

标签: sql sqlite

有下表:

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

这是一个例子。实际上,我在计算其他列时有更复杂的逻辑,需要重用这些计算列来计算其他列,只需在每个地方复制整个代码,我需要它的值看起来非常可怕。

有没有办法计算另一个计算列值?

1 个答案:

答案 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