2017-09-21 1 views
0

Je dois créer un déclencheur dans SQL Server 2017 qui se déclenchera sur INSERT et fonctionnera sur la colonne CreatedDate de ma table.Déclencheur SQL Server basé sur Datetime

Le CreatedDate est de ce format: 2017-09-21 07:15:59.883

Ce que je veux faire est de vérifier le temps de la colonne CreatedDate et si elle se situe entre 7 et 8, je dois insérer une valeur dans une colonne Notes, si elle est entre 15 et 16 je dois en insérer un autre, si c'est entre 23 et 24 je dois en insérer un autre.

Je suis particulièrement bloqué à la clause WHERE dont j'ai besoin de vérifier l'heure. Je ne sais pas comment formuler cela.

+4

S'il vous plaît partager votre code. – PacoDePaco

+0

Si vous fournissez votre code (comme dans - ce que vous avez déjà, mais qui ne fonctionne pas), il est plus probable que les réponses correspondent à votre situation. –

Répondre

3

en supposant que votre CreatedDate est datetime et non chaîne

utilisation datepart à des contrôles pour l'heure createdate et mettez à jour la colonne Notes en conséquence

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) 

EDIT:

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 et si CreateDate est une chaîne de date de validation, c'est bien – LONG

+0

Comment est-ce que je pourrais obtenir ceci dans le contexte CASE WHEN pour les trois heures différentes? –

+0

mettez-vous à jour la même colonne 'Notes' ou une colonne différente? – Squirrel

1

Voir 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