时间函数问题以及触发器问题,高手请进,急啊,在线等待

时间:2021-09-25 10:57:43
小弟现有三个关于时间的问题,望高手能指点一二,不慎感激
(1)
 我用GETDATE()得到当前的日期
 现在我想在当前日期的基础上加上45天,或30天,通用的话的是N天  
 想请教各位SQL Server 里面有没有专门的函数啊
 没有的话,怎么解决呢?
(2)我现在有两个smalldatetime 类型的日期
     比如: '2002-10-10'   '2003-3-5'
     我怎样才能够得到他们之间天数的差值呢?
 (3)我现有一张表 其中有两个关于时间的字段
    A1 smalldatetime
    A2 smalldatetime
   如果当前日期超过A2的日期
   则自动触发将这条纪录删除
   这个好像是时间触发啊,那位能不能写个触发的例子给小弟瞧一瞧啊
 
(4)各位在回答时麻烦写一下是哪道问题,小弟再次感谢大家了

  
    

7 个解决方案

#1


1. 用dateadd(),如
select dateadd(day, getdate(), 45)
select dateadd(day, getdate(), 30)

2. 用datediff(),如
select datediff(day, '2002-10-10', '2003-3-5')

#2


1,dateadd(day,12,'1949-01-01') 
2,datediff

3,触发器只能当数据更新时候才能触发,做个存储过程然后定期作业触发吧

#3


1. dateadd('d',getdate())
2.datediff('d','2002-10-10',2003-3-5')
3.要用计划任务吧。触发器不适合。
4.

#4


先谢谢各位的指点
大家的热心帮助让小弟再次感动

victorycyz 大哥说的计划任务
是不是就是bamboo说的定期执行的存储过程啊?

#5


前面两个问题已解决

#6


(1)
 我用GETDATE()得到当前的日期
 现在我想在当前日期的基础上加上45天,或30天,通用的话的是N天  
 想请教各位SQL Server 里面有没有专门的函数啊
 没有的话,怎么解决呢?
  dateadd(day,45,getdate()),  dateadd(day,30,getdate())
(2)我现在有两个smalldatetime 类型的日期
     比如: '2002-10-10'   '2003-3-5'
     我怎样才能够得到他们之间天数的差值呢?

   datediff(day,'2002-10-10','2003-3-5')
 (3)我现有一张表 其中有两个关于时间的字段
    A1 smalldatetime
    A2 smalldatetime
   如果当前日期超过A2的日期
   则自动触发将这条纪录删除
   这个好像是时间触发啊,那位能不能写个触发的例子给小弟瞧一瞧啊
   最好用job

你的数据库服务器-》企业管理器-》管理-》SQL Server 代理-》作业-》新建作业,按照要求填就可以了,在“步骤”的“命令”中填写你要执行的存储过程或语句,在“调度”里面填写什么时间执行


EXEC sp_add_job @job_name = '作业名字'


EXEC sp_add_jobstep @job_name = '作业名字',
   @step_name = '步骤名子',
   @subsystem = 'TSQL',
   @command = 'delete 表 where getdate()>A2 ',  --此次写你的删除语句, 
   @retry_attempts = 5, --重试次数
   @retry_interval = 5  --重试间隔

EXEC sp_add_jobschedule @job_name = '作业名字', 
   @name = '作业调度名字',
   @freq_type = 4, -- 每天
   @freq_interval = 26, --间隔
   @active_start_time = 10000 --开始时间

(4)各位在回答时麻烦写一下是哪道问题,小弟再次感谢大家了
   写好了,不用谢。

#7


结贴了
谢谢
真的太感谢了

#1


1. 用dateadd(),如
select dateadd(day, getdate(), 45)
select dateadd(day, getdate(), 30)

2. 用datediff(),如
select datediff(day, '2002-10-10', '2003-3-5')

#2


1,dateadd(day,12,'1949-01-01') 
2,datediff

3,触发器只能当数据更新时候才能触发,做个存储过程然后定期作业触发吧

#3


1. dateadd('d',getdate())
2.datediff('d','2002-10-10',2003-3-5')
3.要用计划任务吧。触发器不适合。
4.

#4


先谢谢各位的指点
大家的热心帮助让小弟再次感动

victorycyz 大哥说的计划任务
是不是就是bamboo说的定期执行的存储过程啊?

#5


前面两个问题已解决

#6


(1)
 我用GETDATE()得到当前的日期
 现在我想在当前日期的基础上加上45天,或30天,通用的话的是N天  
 想请教各位SQL Server 里面有没有专门的函数啊
 没有的话,怎么解决呢?
  dateadd(day,45,getdate()),  dateadd(day,30,getdate())
(2)我现在有两个smalldatetime 类型的日期
     比如: '2002-10-10'   '2003-3-5'
     我怎样才能够得到他们之间天数的差值呢?

   datediff(day,'2002-10-10','2003-3-5')
 (3)我现有一张表 其中有两个关于时间的字段
    A1 smalldatetime
    A2 smalldatetime
   如果当前日期超过A2的日期
   则自动触发将这条纪录删除
   这个好像是时间触发啊,那位能不能写个触发的例子给小弟瞧一瞧啊
   最好用job

你的数据库服务器-》企业管理器-》管理-》SQL Server 代理-》作业-》新建作业,按照要求填就可以了,在“步骤”的“命令”中填写你要执行的存储过程或语句,在“调度”里面填写什么时间执行


EXEC sp_add_job @job_name = '作业名字'


EXEC sp_add_jobstep @job_name = '作业名字',
   @step_name = '步骤名子',
   @subsystem = 'TSQL',
   @command = 'delete 表 where getdate()>A2 ',  --此次写你的删除语句, 
   @retry_attempts = 5, --重试次数
   @retry_interval = 5  --重试间隔

EXEC sp_add_jobschedule @job_name = '作业名字', 
   @name = '作业调度名字',
   @freq_type = 4, -- 每天
   @freq_interval = 26, --间隔
   @active_start_time = 10000 --开始时间

(4)各位在回答时麻烦写一下是哪道问题,小弟再次感谢大家了
   写好了,不用谢。

#7


结贴了
谢谢
真的太感谢了