常に生成と列で日付を計算するDATE_ADD結合する方法

Michi :

DBフィドル

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 ALWAYSDATE_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それは理由で発明された、あなたはそれを使用する必要があります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=32160&siteId=1