2016-05-12 3 views
-2

J'ai un projet qui consiste à comparer un champ datetime avec la date et l'heure actuelles, et si la différence entre eux est de 10 minutes, alors je dois sélectionner une date. Cela implique une complexité, comme si la date et l'heure actuelles étaient une date supérieure au champ datetime. Est-ce que quelqu'un a une solution simple à cela?Comparaison SQL datetime avec datetime actuel

+0

Qu'en est-il des données d'exemple et de la sortie attendue –

+0

supposons que l'heure actuelle est 8:04:10 5/12/2016 et la date du champ est 7:50:10 5/12/2016, le décalage horaire est de plus de 10 minutes . C'est quand je veux choisir un autre champ. – user1801774

+0

"un autre champ", lequel?? Voulez-vous dire la ligne ?, une autre colonne ?. Est-ce vraiment difficile d'afficher des exemples de données et le résultat souhaité? – Lamak

Répondre

0

Cela peut se faire très simplement à l'aide DATEDIFF:

IF (SELECT DATEDIFF(MINUTE, a.StartDate, GETDATE()) 
    FROM TableA a) > 10 
BEGIN 
    SELECT * 
    FROM TableB 
END 

Cela dit simplement que si l'heure actuelle (GETDATE()) est plus de 10 minutes après l'StartDate sur TableA, faire autre chose.

Notez que si a.StartDate est supérieure àGETDATE() (quelle qu'en soit la raison), la valeur de DATEDIFF sera négative - dans ce cas, vous changez simplement la comparaison à > -10.

EDIT des commentaires:

Je veux tous les serverID que tout na pas exécuté dans les 10 dernières minutes

Cela peut être trivialement accompli ce qui suit:

SELECT ServerID 
FROM TableA 
WHERE DATEDIFF(MINUTE, LastRunTime, GETDATE()) > 10 

Voici quelques "contrôles" que vous pouvez faire pour voir le comportement de DATEDIFF - le commentaire concernant seulement soucieux de minutes est incorrect, mais sauter à des intervalles plus importants DAY, MONTH, etc. provoque un certain comportement intéressant.

Par exemple:

SELECT DATEDIFF(MONTH, '05/30/2016 08:10:00', '06/01/2016 08:05:00') 

Renvoie 1 (mois), en dépit d'être seulement 2 jours d'intervalle. De même,

SELECT DATEDIFF(DAY, '05/30/2016 08:10:00', '06/01/2016 08:05:00') 

retours 2, malgré le temps pas tout à fait ce qui en fait la marque de 2 jours. Enfin,

SELECT DATEDIFF(YEAR, '12/31/2016 08:10:00', '01/01/2017 08:05:00') 

Renvoie également 1.

Espérons que cela aide à votre compréhension de l'utilisation de DATEDIFF.

+0

Je sais sur DATEDIFF. Ici, vous comparez simplement les minutes.Supposons que l'heure actuelle est 08:10 5/12/2016 et que la date du champ est 8:05 5/11/2016. Il ne fera que comparer l'heure et non la date car les 2 fois ci-dessus sont un jour à part. J'espère que vous obtenez. – user1801774

+0

@ user1801774 c'est complètement faux, bien sûr il prend en compte la date et calcule combien de minutes ces dates sont – Lamak

+0

Je pensais vraiment qu'il ne ferait que comparer les champs datetime correspondants (ie minutes, heures seulement etc) sans considérer d'autres composants de datetime – user1801774