我有一个表tblEmpDetail
,其中包含一列CreatedDate
。
我想为每个创建日期添加72小时,因此如果创建日期为2012-07-14 07:21:19.180
,那么我希望输出为2012-07-17 07:21:19.180
。
有人可以告诉我如何才能实现这一目标?
实际上我想要做的就是去每一行,然后检查是否
getdate() - createddate
等于或小于72小时;然后我需要在createddate
添加72小时。否则我希望该列为null。我把我的代码粘贴到我的代码上。
Declare @PassedTime datetime
set @PassedTime= DATEDIFF(HH,Createddate, GETDATE())
if CONVERT(varchar(20),@PassedTime,108)>=CONVERT(varchar(20),'72:00:00',108)
begin
select empno,empName,CreatedDate,dateadd(HH,72,CreatedDate)BD from tblEmpDetail
end
else
begin
select empno,empName,CreatedDate,'' as BD from tblEmpDetail
end
答案 0 :(得分:5)
不需要循环。
SQL Server擅长“基于集合”的查询。
获得预测:
select
CreatedDate,
DateAdd(hour, 72, CreatedDate) [NewDate]
from
tblEmpDetail
永久更新表格:
update
tblEmpDetail
set
CreatedDate = DateAdd(hour, 72, CreatedDate)
如果你必须有一个循环,你可以使用光标:
declare cur cursor fast_forward read_only for
select
CreatedDate,
DateAdd(hour, 72, CreatedDate) [NewDate]
from
tblEmpDetail
-- here, you would use the cursor.
有关游标的更多信息,请访问:http://msdn.microsoft.com/en-us/library/ms180169.aspx
您的上述查询可以按照以下方式进行:
select
CreatedDate,
CASE
WHEN DateAdd(hour, 72, CreatedDate) <= GetDate() THEN NULL
ELSE DateAdd(hour, 72, CreatedDate)
END [NewDate]
from
tblEmpDetail