2017-09-21 53 views
0

我需要在SQL Server 2017中创建一个触发器,它将在INSERT上触发,并处理我的表的CreatedDate列。基于日期时间的SQL Server触发器

CreatedDate是这种格式:2017-09-21 07:15:59.883

我想要做的是检查CreatedDate列的时间,如果是7〜8之间,我需要它是否插入值到Notes列,是15和16之间我需要插入另一个,如果它在23和24之间我需要插入另一个。

我特别坚持在WHERE条款,我需要检查小时。不知道如何制定这个。

+4

请分享您的代码。 – PacoDePaco

+0

如果你提供你的代码(如你已经有,但没有工作),那么答案更可能符合你的情况。 –

回答

3

假设你CreatedDate是datetime和不串

使用日期部分,以检查CREATEDATE小时并相应地更新Notes列

UPDATE t 
SET Notes = 'a value' 
FROM inserted i 
     INNER JOIN mytable t ON i.pk = t.pk 
WHERE datepart(hour, CreateDate) in (7, 8) 

编辑:

UPDATE t 
SET Notes = case when datepart(hour, CreateDate) in (7, 8) then 'a value' 
        when datepart(hour, CreateDate) in (15, 16) then 'another value' 
        end 
FROM inserted i 
     INNER JOIN mytable t ON i.pk = t.pk 
WHERE datepart(hour, CreateDate) in (7, 8, 15, 16) 
+1

upvoted,如果CreateDate是一个有效的日期字符串,那就很好了 – LONG

+0

我怎样才能把它放到CASE WHEN上下文中三个不同的小时? –

+0

你是否正在更新相同的'Notes'列或不同的列? – Squirrel

1

datepart

where case when DATEPART (HOUR, datetimeField) =7 then someValue 
      case when DATEPART (HOUR, datetimeField) =15 then SomeOtherValue 
      case when DATEPART (HOUR, datetimeField) =23 then AnotherDiffetentValue 
    end