2010-11-02 4 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

ответ

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, вы указываете тот же компонент для bo th (т.е. месяц). Затем вторая константа даты (то есть «20100130») указывает «смещение», которое вы хотите применить с первой даты (т. Е. «20100101»), которая «перезапишет» часть даты, которую вы не сохраняете. Мой обычный пример, когда желая, чтобы удалить временную часть из значения даты и времени:

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

спасибо, ребята, работает для меня –

0

Вы также можете попробовать что-то вроде

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

У нас есть функция, которая вычисляет первый день месяца, так Я просто добавил его, чтобы вычислить 15 вместо этого ...

+0

, который не будет работать на 30-е, хотя, будет (он переполнит февральскую дату в марте) –

Смежные вопросы