2016-03-01 2 views
-1

Disons que j'ai cette table:Comment ajouter/soustrayez jours à une date

DECLARE @Var INT 
SET @Var = (select day from source) 
SELECT * FRom TMP 
INTO #TARGET 
Where tmp.date >= dateadd(day,datediff(day,0,GETDATE()),0) - @Var 
      tmp.date <= dateadd(day,datediff(day,0,GETDATE()),0) 

La requête obtenir le résultat si @val != 0 mais ne fonctionnent pas lorsque @val=0

+0

'DATEADD (jour, datediff (jour, 0, GETDATE()), 0)' - cette chose Diminue le temps de la date et rien de plus. Identique à la conversion en type 'date'. Lorsque @var est égal à zéro, vous devez égaler les dates. Vous 'tmp.date' stocke les dates avec le temps. Donc, finalement, vous essayez de localiser des enregistrements avec par exemple 'tmp.date = 2015-03-01 12: 30: 451' en appliquant ce filtre:' tmp.date> = "2015-03-01 00:00:00" et tmp.date> = "2015-03-01 00:00:00" 'qui est évidemment toujours faux. –

+0

* _à égalité dates -> deux dates égales. oui, et filtre '> = ... <=' bien sûr. –

+0

@IvanStarostin oh yeeess vous savez que je comprends, donc je remercie je devrais faire ceci: 'tmp.date> = dateadd (jour, datediff (jour, 0, GETDATE()), 0) - @Var ET tmp.date <= dateadd (dd, -0, GETDATE()) ' – stoner

Répondre

2

Essayez celui

DECLARE @Var INT 
SET @Var = (select day from source) 
SELECT * FRom TMP 
INTO #TARGET 
Where tmp.date >= dateadd(day,datediff(day,0,GETDATE()),0) - @Var 
      tmp.date <= GETDATE() 
+0

C'est tout, sais que je comprends mon erreur .Merci! – stoner

0

bien sûr, parce que votre La limite supérieure est la même date et comme vous avez l'heure stockée dans cette colonne, vous ne recevez rien.

declare 
    @datebegin date = getdate(), 
    @dateend date = getdate() 

... 

set @datebegin = dateadd(dd, [email protected], @datebegin) 
set @dateend = dateadd(dd, 1, @dateend) /* till the end of this day */ 

SELECT * FRom TMP 
INTO #TARGET 
Where tmp.date >= @datebegin and tmp.date < @dateend 

calc autant que possible avant la requête finale

+0

J'ai besoin de temps pour obtenir toutes les lignes sur la table tmp à partir du début du jour – stoner

+0

Avoir un autre regard sur le prédicat 'where'. –

+0

Cette date 'SELECT date (dd, -0, GETDATE())' retire cette valeur '2016-03-01 10: 59: 55.103' et j'ai besoin de l'heure de début du jour comme ceci' 2016-03-01 00: 00: 00' – stoner

0

Essayez de mettre @var à l'intérieur dateadd: pour la journée

dateadd(day,datediff(day,0,GETDATE())- @Var,0) 
+0

J'aime celui-ci mais aussi ne fonctionne pas. – stoner

0

Lorsque @var est 0 vous essayez d'obtenir Vales à 00:00:00 Pour tmp.date exemple> = '01/03/2016 00:00:00' et tmp.date < = '01/03/2016 00:00:00'

Si la table tmp a des heures comme '2016-03-01 08:00:00', cette valeur n'est pas sélectionnée.

+0

Oui J'ai besoin de temps pour extraire de la table TMP toutes les lignes à partir du début du jour, – stoner

+0

Dans ce cas, vous devez changer la requête en tmp.date