2012-12-13 51 views
0

有一個下表:如何解決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

使用子查詢:

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 
+0

6(在我真正的項目),巨大的嵌套子查詢看起來嚇人,無論如何,但至少我們保持乾燥:-)感謝。 – Ivan