-2

私はmysqlに少し慣れていません。setコマンドを使用して列を計算して新しい列を計算しようとしましたが、実行されません(1064エラー)。

だから私の質問は:-

create tableクエリ文字列を使用して計算列を作成するためのクエリを追加することはできますか?はいの場合、どのように?そうでない場合は、その理由。これに最適な代替手段は何ですか。

私もこれを使って達成できると思いますが、これはTRIGGER避けようとしました。これは良い例ですが、これは挿入されるデータには適用できません。

私はこれを次のように試しました

create table `call_detail` (`service_key` integer not null,
`called` datetime not null,
`called_stamp` integer not null 
        SET  (1 if HOUR(`called`)<10 else 2 if HOUR(`called`)<16 else 3 if HOUR(`called`)<24
            else -1),
PRIMARY KEY (`service_key`) 
);
4

2 に答える 2

0

MySQL にはそのような計算列はありません。リンク先のスレッドは MSSQL 用です。

私が見ているように、ここにはいくつかのオプションがあります

  • トリガーを使用して列を更新する
  • ビューを作成する
  • テーブルを定期的に更新する cron ジョブを設定する
于 2013-02-20T12:27:48.063 に答える
0

これは

  1. ありえない
  2. あなたの構文は完全に間違っています
  3. そして、どこ_dateから来たのですか?

これには VIEW を使用することをお勧めします。これにより、後で必要になる可能性のある情報を失うことなく、必要なものを取得できます。

CREATE VIEW v_call_detail AS
SELECT 
c.*,
CASE WHEN HOUR(created_modified) < 10 THEN 1
     WHEN HOUR(created_modified) BETWEEN 10 AND 15 THEN 2 
     WHEN HOUR(created_modified) BETWEEN 16 AND 23 THEN 3
     ELSE -1
END AS called_stamp
FROM
call_detail c

これは、行がいつ挿入または変更されたかを示す列 created_modified がテーブルにあることを前提としています。次のようにテーブルを作成します。

create table `call_detail` (`service_key` integer not null,
`called` datetime not null,
created_modified timestamp default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`service_key`) /*changed primary key, since you don't have a column `_ID`*/
);
于 2013-02-20T12:33:55.453 に答える