如何让数据库中某一个字段随时间自动更新

时间:2020-12-25 14:39:06
数据库中某一个字段存入员工工龄,是随时间变化的时间,比如说2015年时这个时间是2.5年,到了2016年就是3.5年,怎么用sql控制这个字段让它每个月自动更新一次,增加0.083(1/12),请问怎么写

15 个解决方案

#1


设定SQL Server定时作业job,每个月执行一次update。
可以参考:http://qsfwy.iteye.com/blog/250741

#2


你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

#3


这个写个作业做好咯,按你的需要看是每个月执行一次还是每天执行一次

#4


引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin

#5


引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin

引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)


引用 4 楼 kunyou7003 的回复:
Quote: 引用 2 楼 ch21st 的回复:

你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin

而且我的数据库里存入的不是一个日期,是像2.5年这样的年数

#6


引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin

引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)


引用 4 楼 kunyou7003 的回复:
Quote: 引用 2 楼 ch21st 的回复:

你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin

而且我的数据库里存入的不是一个日期,是像2.5年这样的年数

引用 1 楼 zbdzjx 的回复:
设定SQL Server定时作业job,每个月执行一次update。
可以参考:http://qsfwy.iteye.com/blog/250741

我用的是phpmyadmin里面好像买看到作业这样的设置啊

#7



如果是sql server 2008R2版本,可以使用派生列,例子如下:
drop table tt;

create table tt(c date) ;

insert into tt values('2016-01-01');

alter table tt
add per as cast(datediff(month,c,getdate())*1.0/12 as numeric(8,1));

select  * from tt
/*
c per
2016-01-01 0.8
*/

#8


你是MYSQL数据库
用CREATE EVENT  创建event
你的表里有用于起始的起始时间吗?
没有起始时间没法计算工龄

#9


如果是MySQL,那就看一下这个:http://lobert.iteye.com/blog/1953827
要在数据库中去操作。

引用 4 楼 kunyou7003 的回复:
Quote: 引用 2 楼 ch21st 的回复:

你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin

#10


引用 9 楼 zbdzjx 的回复:
如果是MySQL,那就看一下这个:http://lobert.iteye.com/blog/1953827
要在数据库中去操作。

Quote: 引用 4 楼 kunyou7003 的回复:

Quote: 引用 2 楼 ch21st 的回复:

你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin


因为你这时要自动运行,所以你可以用phpmyadmin创建一个schedule,定期执行
下面是每天1点10分运行更新

mysql> create tb_employee(userid varchar(100),StartDate datetime,WorkedAge float);
insert into tb_employee(userID,StartDate)values('0001','2015-05-05');
---------------

create event `UpdateWorkedMonth` on schedule every 1 day starts '2016-11-01 01:10:00' 
do update tb_employee set WorkedAge=TIMESTAMPDIFF(MONTH,StartDate, curdate())/12;


#11


引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)


引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)


引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)




引用 10 楼 ch21st 的回复:
Quote: 引用 9 楼 zbdzjx 的回复:

如果是MySQL,那就看一下这个:http://lobert.iteye.com/blog/1953827
要在数据库中去操作。

Quote: 引用 4 楼 kunyou7003 的回复:

Quote: 引用 2 楼 ch21st 的回复:

你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin


因为你这时要自动运行,所以你可以用phpmyadmin创建一个schedule,定期执行
下面是每天1点10分运行更新

mysql> create tb_employee(userid varchar(100),StartDate datetime,WorkedAge float);
insert into tb_employee(userID,StartDate)values('0001','2015-05-05');
---------------

create event `UpdateWorkedMonth` on schedule every 1 day starts '2016-11-01 01:10:00' 
do update tb_employee set WorkedAge=TIMESTAMPDIFF(MONTH,StartDate, curdate())/12;



CREATE EVENT e_test
ON SCHEDULE EVERY 1 Day
DO UPDATE position SET Exp_CAE=Exp_CAE+ round(DATEDIFF(mm,'2016-09-30',GETDATE())/12.0,2)
这样不知道为什么不对,DATEDIFF报错了,我Exp_CAE存入的是年数2.5,2016-09-30'是该员工工作年数为2.5时的时间,这样加起来就可以了吧,Exp_CAE是用计算得到的年数,并不一定是简单的减去起始时间,所以这个字段我必须存入年数

#12


引用 10 楼 ch21st 的回复:
Quote: 引用 9 楼 zbdzjx 的回复:

如果是MySQL,那就看一下这个:http://lobert.iteye.com/blog/1953827
要在数据库中去操作。

Quote: 引用 4 楼 kunyou7003 的回复:

Quote: 引用 2 楼 ch21st 的回复:

你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin


因为你这时要自动运行,所以你可以用phpmyadmin创建一个schedule,定期执行
下面是每天1点10分运行更新

mysql> create tb_employee(userid varchar(100),StartDate datetime,WorkedAge float);
insert into tb_employee(userID,StartDate)values('0001','2015-05-05');
---------------

create event `UpdateWorkedMonth` on schedule every 1 day starts '2016-11-01 01:10:00' 
do update tb_employee set WorkedAge=TIMESTAMPDIFF(MONTH,StartDate, curdate())/12;



CREATE EVENT test
ON SCHEDULE EVERY 1 SECOND starts '2016-10-31 15:06:00' 
DO UPDATE position SET Exp_CAE=Exp_CAE+ round(TIMESTAMPDIFF(MONTH,'2016-09-30',curdate())/12.0,2)
我试了这样的,sql语句成功执行了,但是数据并没有更新啊

#13


--	drop table tab
create table tab(
id int identity(1,1),
birthDate datetime,
age as datediff(YEAR,birthDate,GETDATE()))
go
insert into tab(birthDate)
select '2001-05-15' union all
select '1969-01-11' union all
select '2000-08-01' union all
select '1988-10-25' union all
select '2012-05-12'
go
select * from tab

id birthDate age
-- ----------------------- ----
1 2001-05-15 00:00:00.000 15
2 2001-05-15 00:00:00.000 15
3 1969-01-11 00:00:00.000 47
4 2000-08-01 00:00:00.000 16
5 1988-10-25 00:00:00.000 28


计算列若标记为 PERSISTED,才能参与 FOREIGN KEY 或 CHECK 约束


#14


引用 12 楼 kunyou7003 的回复:
Quote: 引用 10 楼 ch21st 的回复:

Quote: 引用 9 楼 zbdzjx 的回复:

如果是MySQL,那就看一下这个:http://lobert.iteye.com/blog/1953827
要在数据库中去操作。

Quote: 引用 4 楼 kunyou7003 的回复:

Quote: 引用 2 楼 ch21st 的回复:

你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin


因为你这时要自动运行,所以你可以用phpmyadmin创建一个schedule,定期执行
下面是每天1点10分运行更新

mysql> create tb_employee(userid varchar(100),StartDate datetime,WorkedAge float);
insert into tb_employee(userID,StartDate)values('0001','2015-05-05');
---------------

create event `UpdateWorkedMonth` on schedule every 1 day starts '2016-11-01 01:10:00' 
do update tb_employee set WorkedAge=TIMESTAMPDIFF(MONTH,StartDate, curdate())/12;



CREATE EVENT test
ON SCHEDULE EVERY 1 SECOND starts '2016-10-31 15:06:00' 
DO UPDATE position SET Exp_CAE=Exp_CAE+ round(TIMESTAMPDIFF(MONTH,'2016-09-30',curdate())/12.0,2)
我试了这样的,sql语句成功执行了,但是数据并没有更新啊


这是创建的一个job,到你设定的时间才运行,你将时间设定的离你当前时间近点

#15


如果你是要在数据库表中就显示这样的结果,很简单,在设计表的时候使用公式即可。这种方法最简单,最直接,也不用执行什么作业什么的。具体如下: 如何让数据库中某一个字段随时间自动更新

#1


设定SQL Server定时作业job,每个月执行一次update。
可以参考:http://qsfwy.iteye.com/blog/250741

#2


你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

#3


这个写个作业做好咯,按你的需要看是每个月执行一次还是每天执行一次

#4


引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin

#5


引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin

引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)


引用 4 楼 kunyou7003 的回复:
Quote: 引用 2 楼 ch21st 的回复:

你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin

而且我的数据库里存入的不是一个日期,是像2.5年这样的年数

#6


引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin

引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)


引用 4 楼 kunyou7003 的回复:
Quote: 引用 2 楼 ch21st 的回复:

你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin

而且我的数据库里存入的不是一个日期,是像2.5年这样的年数

引用 1 楼 zbdzjx 的回复:
设定SQL Server定时作业job,每个月执行一次update。
可以参考:http://qsfwy.iteye.com/blog/250741

我用的是phpmyadmin里面好像买看到作业这样的设置啊

#7



如果是sql server 2008R2版本,可以使用派生列,例子如下:
drop table tt;

create table tt(c date) ;

insert into tt values('2016-01-01');

alter table tt
add per as cast(datediff(month,c,getdate())*1.0/12 as numeric(8,1));

select  * from tt
/*
c per
2016-01-01 0.8
*/

#8


你是MYSQL数据库
用CREATE EVENT  创建event
你的表里有用于起始的起始时间吗?
没有起始时间没法计算工龄

#9


如果是MySQL,那就看一下这个:http://lobert.iteye.com/blog/1953827
要在数据库中去操作。

引用 4 楼 kunyou7003 的回复:
Quote: 引用 2 楼 ch21st 的回复:

你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin

#10


引用 9 楼 zbdzjx 的回复:
如果是MySQL,那就看一下这个:http://lobert.iteye.com/blog/1953827
要在数据库中去操作。

Quote: 引用 4 楼 kunyou7003 的回复:

Quote: 引用 2 楼 ch21st 的回复:

你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin


因为你这时要自动运行,所以你可以用phpmyadmin创建一个schedule,定期执行
下面是每天1点10分运行更新

mysql> create tb_employee(userid varchar(100),StartDate datetime,WorkedAge float);
insert into tb_employee(userID,StartDate)values('0001','2015-05-05');
---------------

create event `UpdateWorkedMonth` on schedule every 1 day starts '2016-11-01 01:10:00' 
do update tb_employee set WorkedAge=TIMESTAMPDIFF(MONTH,StartDate, curdate())/12;


#11


引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)


引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)


引用 2 楼 ch21st 的回复:
你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)




引用 10 楼 ch21st 的回复:
Quote: 引用 9 楼 zbdzjx 的回复:

如果是MySQL,那就看一下这个:http://lobert.iteye.com/blog/1953827
要在数据库中去操作。

Quote: 引用 4 楼 kunyou7003 的回复:

Quote: 引用 2 楼 ch21st 的回复:

你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin


因为你这时要自动运行,所以你可以用phpmyadmin创建一个schedule,定期执行
下面是每天1点10分运行更新

mysql> create tb_employee(userid varchar(100),StartDate datetime,WorkedAge float);
insert into tb_employee(userID,StartDate)values('0001','2015-05-05');
---------------

create event `UpdateWorkedMonth` on schedule every 1 day starts '2016-11-01 01:10:00' 
do update tb_employee set WorkedAge=TIMESTAMPDIFF(MONTH,StartDate, curdate())/12;



CREATE EVENT e_test
ON SCHEDULE EVERY 1 Day
DO UPDATE position SET Exp_CAE=Exp_CAE+ round(DATEDIFF(mm,'2016-09-30',GETDATE())/12.0,2)
这样不知道为什么不对,DATEDIFF报错了,我Exp_CAE存入的是年数2.5,2016-09-30'是该员工工作年数为2.5时的时间,这样加起来就可以了吧,Exp_CAE是用计算得到的年数,并不一定是简单的减去起始时间,所以这个字段我必须存入年数

#12


引用 10 楼 ch21st 的回复:
Quote: 引用 9 楼 zbdzjx 的回复:

如果是MySQL,那就看一下这个:http://lobert.iteye.com/blog/1953827
要在数据库中去操作。

Quote: 引用 4 楼 kunyou7003 的回复:

Quote: 引用 2 楼 ch21st 的回复:

你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin


因为你这时要自动运行,所以你可以用phpmyadmin创建一个schedule,定期执行
下面是每天1点10分运行更新

mysql> create tb_employee(userid varchar(100),StartDate datetime,WorkedAge float);
insert into tb_employee(userID,StartDate)values('0001','2015-05-05');
---------------

create event `UpdateWorkedMonth` on schedule every 1 day starts '2016-11-01 01:10:00' 
do update tb_employee set WorkedAge=TIMESTAMPDIFF(MONTH,StartDate, curdate())/12;



CREATE EVENT test
ON SCHEDULE EVERY 1 SECOND starts '2016-10-31 15:06:00' 
DO UPDATE position SET Exp_CAE=Exp_CAE+ round(TIMESTAMPDIFF(MONTH,'2016-09-30',curdate())/12.0,2)
我试了这样的,sql语句成功执行了,但是数据并没有更新啊

#13


--	drop table tab
create table tab(
id int identity(1,1),
birthDate datetime,
age as datediff(YEAR,birthDate,GETDATE()))
go
insert into tab(birthDate)
select '2001-05-15' union all
select '1969-01-11' union all
select '2000-08-01' union all
select '1988-10-25' union all
select '2012-05-12'
go
select * from tab

id birthDate age
-- ----------------------- ----
1 2001-05-15 00:00:00.000 15
2 2001-05-15 00:00:00.000 15
3 1969-01-11 00:00:00.000 47
4 2000-08-01 00:00:00.000 16
5 1988-10-25 00:00:00.000 28


计算列若标记为 PERSISTED,才能参与 FOREIGN KEY 或 CHECK 约束


#14


引用 12 楼 kunyou7003 的回复:
Quote: 引用 10 楼 ch21st 的回复:

Quote: 引用 9 楼 zbdzjx 的回复:

如果是MySQL,那就看一下这个:http://lobert.iteye.com/blog/1953827
要在数据库中去操作。

Quote: 引用 4 楼 kunyou7003 的回复:

Quote: 引用 2 楼 ch21st 的回复:

你设置一个job,用SQL Agent就行,每天或每个月运行按照 你的需要
然后根据datediff(mm,入职时间,getdate())/12.0


UPDATE e SET e.workmonth= round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)--=1.5
FROM employee e
WHERE  e.workmonth!=round(DATEDIFF(mm,'5/5/2015',GETDATE())/12.0,1)

这个是写在php里面,还是直接操作数据库就行了,我用的数据库是phpmyadmin


因为你这时要自动运行,所以你可以用phpmyadmin创建一个schedule,定期执行
下面是每天1点10分运行更新

mysql> create tb_employee(userid varchar(100),StartDate datetime,WorkedAge float);
insert into tb_employee(userID,StartDate)values('0001','2015-05-05');
---------------

create event `UpdateWorkedMonth` on schedule every 1 day starts '2016-11-01 01:10:00' 
do update tb_employee set WorkedAge=TIMESTAMPDIFF(MONTH,StartDate, curdate())/12;



CREATE EVENT test
ON SCHEDULE EVERY 1 SECOND starts '2016-10-31 15:06:00' 
DO UPDATE position SET Exp_CAE=Exp_CAE+ round(TIMESTAMPDIFF(MONTH,'2016-09-30',curdate())/12.0,2)
我试了这样的,sql语句成功执行了,但是数据并没有更新啊


这是创建的一个job,到你设定的时间才运行,你将时间设定的离你当前时间近点

#15


如果你是要在数据库表中就显示这样的结果,很简单,在设计表的时候使用公式即可。这种方法最简单,最直接,也不用执行什么作业什么的。具体如下: 如何让数据库中某一个字段随时间自动更新