2010-11-02 58 views
1

我在我的表有這個更新日期列表具有相同的一天

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

我想改變每一個記錄,讓他們都同一天,也就是15日 這樣

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 

如果我喜歡30日,該怎麼辦? 記錄應

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 

感謝

+0

那麼,你到目前爲止提出了什麼?或者你期望我們爲你做所有事情? – Oded 2010-11-02 09:55:01

回答

1

您可以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 

結果:

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 

基本上,在DATEADD/DATEDIFF,你指定相同的組件(即月)。然後,第二個日期常數(即'20100130')指定你希望從第一個日期(即'20100101')應用的「偏移量」,它將「覆蓋」你不保留的日期部分。我通常的例子是希望從日期時間值刪除時間部分時:

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

謝謝你們,我爲 – 2010-11-02 13:49:02

0

您也可以嘗試像

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

我們有計算一個月的第一天的函數,因此我剛剛用它來計算15代替...

+0

工作,但它不會在30日工作,它會(它會溢出2月日期到3月) – 2010-11-02 10:19:46

相關問題