“我需要创建一个字段,显示日期和现在之间的天数。
TABLE: reg_add
+------------+---------+
| Name | Type |
+------------+---------+
| hm_date | date |
+------------+---------+
| total_days | date |
+------------+---------+
我的客户将输入以下日期,例如“hm_date”:2012年5月1日。
我需要“total_days”来显示当前日期2012年5月1日之间的总天数。
我想在服务器端实现这一点,这对我来说有点新鲜。
我需要创建 TRIGGER 以便始终更新“total_days”
我从这开始,我在制作触发器并将其设置正确时遇到了问题:
SELECT DATEDIFF(curdate(),hm_date) as total_days FROM reg_add
任何帮助都将不胜感激。
埃里克
答案 0 :(得分:2)
使用TIMESTAMPDIFF函数 -
,您可以非常轻松地计算它SELECT TIMESTAMPDIFF(DAY, hm_date, NOW()) FROM reg_add;
答案 1 :(得分:1)
我查看了MySQL Trigger Docs,从外观上看,您只能为事件类型Insert,Update和Delete创建触发器。因此,您的触发器实际上不会根据需要更新您的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)
答案 2 :(得分:0)
DATEDIFF
函数需要3个参数。 sytax是
DATEDIFF(date part, date1, date2).
我会尝试DATEDIFF(d,GETDATE(),hm_date) AS total_days FROM reg_add
答案 3 :(得分:0)
您可以使用View:
代替触发器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
中看到它正常工作