0

“我需要创建一个字段来显示日期和现在之间的天数。

TABLE:  reg_add

+------------+---------+
| Name       | Type    |
+------------+---------+ 
| hm_date    | date    |
+------------+---------+ 
| total_days | date    |
+------------+---------+ 

我的客户将在“hm_date”中输入以下日期:2012 年 5 月 1 日。

我需要“total_days”来显示当前日期 2012 年 5 月 1 日之间的总天数。

我想在服务器端实现这一点,这对我来说有点新鲜。

我需要创建一个触发器以始终更新“total_days”

我从这个开始,我无法制作触发器并使其正确:

SELECT DATEDIFF(curdate(),hm_date) as total_days FROM reg_add

任何帮助,将不胜感激。

埃里克

4

4 回答 4

2

您可以使用TIMESTAMPDIFF函数非常轻松地即时计算它-

SELECT TIMESTAMPDIFF(DAY, hm_date, NOW()) FROM reg_add;
于 2012-05-11T14:30:47.087 回答
1

我查看了 MySQL 触发器文档,从它的外观来看,您只能为事件类型 Insert、Update 和 Delete 创建触发器。因此,您的 Trigger 实际上不会按照您的需要更新您的 total_days 字段(应该是 int)。[听起来您希望它按时间更新您的字段(也就是每 x 小时更新一次)]。

这是文档:http ://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

我建议在 php 中编写一个每天运行一次(或多次)的 cron 作业,它将为您更新该字段。

在您的 cron 中,您应该只需要运行一个 sql 语句:(这应该遍历整个表并更新每一行的 total_days 字段)

UPDATE reg_add SET total_days = DATEDIFF(curdate(),hm_date)
于 2012-05-11T14:05:15.387 回答
0

Erik,我使用的是 tsql,对 MySQL 不太熟悉,但在 tsql 中,该DATEDIFF函数需要 3 个参数。语法是

DATEDIFF(date part, date1, date2).

我会尝试DATEDIFF(d,GETDATE(),hm_date) AS total_days FROM reg_add

于 2012-05-11T13:57:45.843 回答
0

您可以使用视图代替触发器:

CREATE VIEW reg_add_with_total_days_VIEW
  AS
SELECT hm_date
     , DATEDIFF( CURDATE(), hm_date ) AS total_days
FROM reg_add ;

然后,您可以在每次需要总天数时使用该视图 - 这将即时计算:

SELECT hm_date, total_days
FROM reg_add_with_total_days_VIEW 

您可以看到它在SQL-Fiddle中工作

于 2012-05-11T14:58:13.160 回答