1

tblEmpDetail列を含むテーブルがありますCreatedDate

作成された各日付に72時間を追加したいので、作成された日付がの場合2012-07-14 07:21:19.180、出力はになります2012-07-17 07:21:19.180

誰かが私にこれをどのように達成できるか教えてもらえますか?

実際に私がやりたいのは、各行に移動して、

getdate() - createddate 

72時間以下。次に、に72時間を追加する必要がありcreateddateます。それ以外の場合は、その列を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
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 に答える