-2

我对mysql有点陌生。我试图在 set 命令的帮助下计算列以计算新列,但它没有执行(1064 错误)。

所以我的问题是:-

是否可以使用创建表查询字符串添加用于创建计算列的查询?如果是,那怎么办?如果没有,那为什么。什么应该是最好的选择。

我认为,我也可以使用它来实现这一点,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

我建议您为此使用视图。这样,您就不会丢失以后可能需要的信息,但仍能得到您想要的信息。

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 回答