1

我有一个tblEmpDetail包含一列的表CreatedDate

我想为每个创建日期添加 72 小时,所以如果创建日期是,2012-07-14 07:21:19.180那么我希望输出为2012-07-17 07:21:19.180.

有人可以让我知道我该怎么做吗?

实际上我想要做的是去每一行然后检查是否

getdate() - createddate 

等于或少于72小时;那么我需要将 72 小时添加到createddate. 否则我希望该列为空。我正在粘贴我所做的代码。

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
4

1 回答 1

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
于 2012-07-15T02:47:26.367 回答