2010-09-20 2 views
0

Ok J'essaie d'écrire une requête qui dit obtenir la date actuelle et en faire la date de début. Ensuite, je veux revenir un mois en arrière à partir de cette date pour EndDate. Est-il possible de faire cela? Comme si c'était le 15/09/2010 comme date de début je peux aller un mois de retour au 8-15-2010 ou n'est-ce pas possible .... que feriez-vous pour comme 20/09/2010 comme le début date depuis chaque mois a un nombre différent de jours dans celui-ci? Sinon, si ce n'est pas possible, comment pourrais-je faire autrement? Le rapport sera toujours exécuté le 25 du mois, donc des idées? Je dois aller du 25 retour d'un mois .... Je peux obtenir des enregistrements en double entre les mois si nécessaire, mais moins est évidemment mieuxDate de début SQL est le jour actuel puis la date de fin est il y a 1 mois même si ce n'est pas du premier au dernier

En ce moment je suis en utilisant ceci:

DECLARE @StartDate DATETIME, 
@EndDate DATETIME; 

SET @StartDate = DATEADD(m,-1,GETDATE()); 
SET @EndDate = DATEADD(m, 1, @StartDate); 

Est-ce que ce travail ?

De même, comment puis-je dire que mon AuditInsertTimestamp se situe entre @Start et @EndDate?

Actuellement, j'ai ceci:

AND cvn.[AuditInsertTimestamp] BETWEEN @StartDate AND @EndDate ; 

Cela me donne encore des dates comme si .... 26/07/2010

Merci!

+0

Quelle devrait être la date de fin pour être Mars 30 2010? –

+0

La date de fin devrait être le 30 février 2010 Je pense ... – user380432

+1

Le 30 février n'est pas une date réelle. –

Répondre

2

Cela should work. L'avez-vous essayé?

Si cela ne fonctionne pas (et il n'y a que 12 cas de test pour vérifier si vous ne faites pas confiance à la documentation), vous pouvez reconstruire la date à partir du date parts.

Voici le problème. Il devrait ressembler à ceci:

cvn.[Subject] = 'Field Changed (Plate Type)' 
    AND (
     cvn.[Note] LIKE 'Old Type: IRP%New Type: BASE PLATE%' 
     OR cvn.[Note] LIKE 'Old Type: Base Plate%New Type: IRP%' 
    ) 
    AND cvn.AuditInsertTimestamp BETWEEN GETDATE() AND DATEADD(MONTH, -1, GETDATE()) 

et prend precidence dessus ou, si vous ramassez quelque chose avec Old Type: IRP ou dans la plage de date correcte (avec Old Type: Plaque de base)

+0

Oui je l'ai fait alors je viens d'ajouter à mon OP ce que j'ai utilisé dans ma clause where et il me donne encore des dates comme 26/07/2010 ... – user380432

+0

Comme un cas de test, codez les deux dates à ce que vous pensez qu'ils devrait être et réexécuter la requête. Vous pouvez également sélectionner @StartDate et @EndDate pour voir à quelles valeurs elles sont réellement définies. L'entre .. et .. devrait fonctionner, même si je pense que c'est inclusif pour la première date et exclusif pour la seconde. – Kendrick

+0

Le @Start et @End est correct mais quand je dis AuditInsertTimestamp BETWEEN @Start ET @End il ne me donne pas les données correctes. – user380432

0

Sur la base votre commentaire:

Bien ceci est utilisé pour sélectionner les enregistrements . Donc, si je l'exécute le 25 I besoin de 30 jours à l'époque mon champ AuditInsertTimestamp doit être entre ces 2 dates.

Je pense que vous devez faire quelque chose comme ceci:

SELECT * FROM Table 
WHERE AuditInsertTimestamp BETWEEN GETDATE() AND DATEADD(MONTH, -1, GETDATE()) 
+0

Cela me donne encore 2010-07-20 comme certaines des dates ... hmmmm – user380432

+0

Vraiment? Que se passe-t-il lorsque vous faites simplement SELECT GETDATE() '? Quel est le type de données de 'AuditInsertTimestamp'? –

+0

AuditInsertTimestamp est un horodateur. et sélectionnez getdate() = 2010-09-20 09: 46: 43.087 – user380432

Questions connexes