J'essaie d'écrire une requête qui me permettra d'obtenir des enregistrements entre maintenant et quelques minutes dans le passé. J'ai le nombre de minutes en millisecondes. Donc, j'essaie d'écrire une requête SQL qui me permettra d'obtenir ces enregistrements.

Je vois un Fonction DateAdd. Cependant, je ne vois pas de fonction pour soustraire du temps à une date. Du point de vue pseduo-code, j'essaye de faire ceci:

SELECT
  *
FROM
  MyTable
WHERE
  CreatedAt > (GetUtcDate() - milliseconds)

Comment puis-je obtenir des enregistrements de MyTable qui se sont produits au cours d'une période passée?

0
Some User 20 nov. 2018 à 16:58

4 réponses

Meilleure réponse

Nous pouvons essayer d'utiliser DATEADD en mode milliseconde:

SELECT *
FROM MyTable
WHERE CreatedAt > DATEADD(ms, -60000, GETDATE());  -- 60000 ms = 1 minute

Cela renverrait tous les enregistrements qui ont été créés dans la minute suivant la date et l'heure actuelles.

3
Tim Biegeleisen 20 nov. 2018 à 14:01

La fonction souhaitée est DATEADD (Transact-SQL).

SELECT {YourColumns}
FROM MyTable MT
WHERE CreatedAt > DATEADD(millisecond,{value},GETUTCDATE());
1
Larnu 20 nov. 2018 à 14:02

Malgré son nom, la fonction DATEADD est aussi la fonction "DATESUBTRACT" que vous recherchez. (Intentionnellement double-guillemets comme quasi-code.)

Le premier paramètre définit les types d'unités que vous ajoutez ou soustrayez, c'est-à-dire HOUR, DAY, WEEK, etc., ou, dans votre cas, MILLISECOND. Dans le deuxième paramètre, si vous souhaitez ajouter du temps, vous entrez un nombre positif. Si vous souhaitez soustraire le temps, comme vous le faites ici, entrez un nombre d'unités négatif.

1
Eric Brandt 20 nov. 2018 à 14:16

La meilleure façon d'interagir avec la date et l'heure dans SQL est d'utiliser des fonctions de date et d'heure spécifiques plutôt que d'ajouter des dates comme vous le feriez pour ajouter des nombres.

Dans ce cas, la fonction que vous recherchez est DATEADD, en l'utilisant, votre cordon devrait changer comme ceci:

SELECT *
FROM MyTable
WHERE CreatedAt > DATEADD(ms, -milliseconds, GetUtcDate())
0
Adminorama 20 nov. 2018 à 14:10