2010-11-02 3 views
1

J'ai dans mon tableauMettre à jour la liste des dates d'avoir le même jour

TempTable 
Id Date 
1 1-15-2010 
2 2-14-2010 
3 3-14-2010 
4 4-15-2010 

je voudrais changer tous les records afin qu'ils aient tous le même jour, c'est le 15 comme celui-ci

TempTable 
Id Date 
1 1-15-2010 
2 2-15-2010 <--change to 15 
3 3-15-2010 <--change to 15 
4 4-15-2010 

Et si je veux le 30? les dossiers doivent être

TempTable 
Id Date 
1 1-30-2010 
2 2-28-2010 <--change to 28 because feb has 28 days only 
3 3-30-2010 <--change to 30 
4 4-30-2010 

grâce

+0

Alors, qu'avez-vous trouvé jusqu'à présent? Ou voulez-vous que nous fassions tout pour vous? – Oded

Répondre

1

Vous pouvez jouer quelques trucs amusants avec DATEADD/DATEDIFF:

create table T (
    ID int not null, 
    DT date not null 
) 
insert into T (ID,DT) 
select 1,'20100115' union all 
select 2,'20100214' union all 
select 3,'20100314' union all 
select 4,'20100415' 

SELECT ID,DATEADD(month,DATEDIFF(month,'20100101',DT),'20100115') 
from T 

SELECT ID,DATEADD(month,DATEDIFF(month,'20100101',DT),'20100130') 
from T 

Résultats:

ID   
----------- ----------------------- 
1   2010-01-15 00:00:00.000 
2   2010-02-15 00:00:00.000 
3   2010-03-15 00:00:00.000 
4   2010-04-15 00:00:00.000 

ID   
----------- ----------------------- 
1   2010-01-30 00:00:00.000 
2   2010-02-28 00:00:00.000 
3   2010-03-30 00:00:00.000 
4   2010-04-30 00:00:00.000 

Fondamentalement, dans le DATEADD/DATEDIFF, vous spécifiez le même composant à bo th (c.-à-d. mois). Ensuite, la deuxième constante de date (à savoir «20100130») spécifie le «décalage» que vous souhaitez appliquer à partir de la première date (par exemple «20100101»), qui «écrasera» la partie de la date que vous ne conservez pas. Mon exemple habituel est lorsque l'on souhaite retirer la partie de temps d'une valeur datetime:

SELECT DATEADD(day,DATEDIFF(day,'20010101',<date column>),'20100101') 
+0

merci les gars, travaille pour moi –

0

Vous pouvez également essayer quelque chose comme

UPDATE TempTable 
SET [Date] = DATEADD(dd,15-day([Date]), DATEDIFF(dd,0,[Date])) 

Nous avons une fonction qui calcule le premier jour d'un mois, donc Je viens de l'ajouter pour calculer le 15 à la place ...

+0

qui ne fonctionnera pas pour le 30 si, sera-ce (il va déborder la date de février en mars) –