Обновите список дат, чтобы иметь тот же день - PullRequest
1 голос
/ 02 ноября 2010

У меня есть это в моей таблице

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

спасибо

Ответы [ 2 ]

1 голос
/ 02 ноября 2010

Вы можете сыграть несколько забавных трюков с 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»), которое будет «перезаписывать» часть даты, которую вы не храните. Мой обычный пример - когда вы хотите удалить часть времени из значения datetime:

SELECT DATEADD(day,DATEDIFF(day,'20010101',<date column>),'20100101')
0 голосов
/ 02 ноября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...