2011-07-01 4 views
2

Certaines des dates dans une colonne de dates ont été enregistrées incorrectes. Je voudrais faire une requête qui soustrait un jour de chaque date SI les jours sont dans une certaine plage de dates.sql soustraire les dates

Je sais que je vais devoir utiliser DATEADD et UPDATE, mais je n'arrive pas à comprendre. Merci d'avance.

Répondre

4

Cela devrait le faire:

UPDATE [SomeTable] 
SET  [DateColumn] = DATEADD(d, -1, [DateColumn]) 
WHERE [DateColumn] BETWEEN [Date1] AND [Date2] 

Voici le Doc MSDN sur la fonction DATEADD: http://msdn.microsoft.com/en-us/library/ms186819.aspx

Lorsque vous effectuez des mises à jour sur des données comme celui-ci, il est toujours préférable d'exécuter une instruction select première avec les mêmes critères pour vous assurer que vous mettez à jour les enregistrements corrects. Cela permet également de réduire le niveau de stress de la mise à jour (surtout si vous n'êtes pas familier avec SQL).

SELECT *, --Depending on what columns you would like to see, the wildcard could be replaced 
      DATEADD(d, -1, [DateColumn]) AS ProposedDate 
FROM  [SomeTable] 
WHERE  [DateColumn] BETWEEN [Date1] AND [Date2] 
+0

+1 nom approprié, lol – Andomar

+0

Sur la requête de test, il serait préférable si vous utilisez 'DATEADD (d, -1, [DateColumn])' au lieu de '' * – NaveenBhat

+0

@Knvm, vous avez raison, cela serait utile. Mise à jour –

0
DECLARE @min_date datetime, @max_date datetime; 

UPDATE yourtable 
SET date_column = DATEADD(day, -1, date_column) 
WHERE id IN (
    SELECT id 
    FROM yourtable 
    WHERE date_column BETWEEN @min_date AND @max_date 
); 

Vous devrez définir les valeurs appropriées pour @min_date et @max_date.

+0

Quel est le point dans la sous-sélection? – JNK

+0

@JNK: J'ai trouvé le modèle plus facile à suivre car les critères de mise à jour sont plus complexes. Probablement pas nécessaire dans ce cas, mais il garde la partie 'UPDATE' de l'instruction simple. – Yuck

+0

OK, juste curieux si vous avez vu quelque chose que je n'ai pas :) – JNK

0
UPDATE MyTable 
SET DateField = DATEADD(Day, -1, DateField) 
WHERE Datefield BETWEEN '1/1/2011' AND '2/1/2011' 
0
use UPDATE 
set the data = (do the date math) 
WHERE the date is in the range you want 
and the key is the row you want. 
+0

Quelle langue est-ce? – JNK

+0

C'est la même langue que l'OP utilise pour poser la question. Je donne une réponse pseudocode à une pseudo-question. – Randy