Michi :
CREATE TABLE Days (
id int primary key,
date_fix VARCHAR(255),
date_calculated VARCHAR(255) GENERATED ALWAYS AS (DATE_ADD("date_fix", INTERVAL 1 DAY))
);
INSERT Days
(id, date_fix, date_calculated
)
VALUES
("1", "2019-01-01", ""),
("2", "2019-01-06", ""),
("3", "2019-05-01", ""),
("4", "2019-08-15", ""),
("5", "2019-10-03", "");
上記の表では、私はと呼ばれる列を挿入したいdate_calculated
、次のよう日付を計算します。
date_fix + 1 day
したがって、私は結合しようとしたGENERATED ALWAYS
とDATE_ADD("date_fix", INTERVAL 1 DAY)
私はそれがこれまでに動作させることができませんでした。
私は、問題が関連すると仮定しINSERT
、私は現在、使用しているため文の""
列にdate_calculated
私はこれを交換する方法を任意の手掛かりがありません""
記載されているようにカラムが計算されていることを実現するためには。
あなたはどのように計算された列で目的のテーブルを取得する任意のアイデアを持っていますか?
ゴードン・リノフ:
あなたのコードは修正のカップルと罰金を動作します:
CREATE TABLE Days (
id int primary key,
date_fix VARCHAR(255),
date_calculated VARCHAR(255) GENERATED ALWAYS AS (DATE_ADD(date_fix, INTERVAL 1 DAY))
);
INSERT Days (id, date_fix)
VALUES (1, '2019-01-01'),
(2, '2019-01-06'),
(3, '2019-05-01'),
(4, '2019-08-15'),
(5, '2019-10-03');
ここで、Aデシベル<>フィドルです。
あなたの主要な問題は、非常に引用符で混乱していることです。SQLを書くとき、それはかなり簡単です:
- 使用SINGLEは、日付と文字列定数のために引用しています。
- 番号のすべての引用符を使用しないでください。
- (あなたがそれらを使用している理由を本当に理解していない限り)二重引用符を使用しないでください。これは、単一引用符の同義語ですので、MySQLはSQLを拡張します。
第二の問題は、生成された列に値を挿入する必要がないということです。値は、ときに、クエリの列ではなく、あなたが値を挿入計算されます。
そして、第三の問題は、種類です。文字列として日付を格納しないでください。MySQLはと呼ばれる、日付を格納するための素晴らしいデータ型を持っていますdate
。それは理由で発明された、あなたはそれを使用する必要があります。