0

次の表があります。

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

これはイラストです。実際には、追加の列を計算するロジックがはるかに複雑であり、これらの計算された列を再利用して他の列を計算し、コード全体をあらゆる場所にコピーするだけで、その値が非常に怖いように見える必要があります。

別の列の値を計算する際に、計算された列の値に対処する方法はありますか?

4

1 に答える 1

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
于 2012-12-13T14:24:18.470 に答える