2016-06-08 9 views
0

У меня есть оператор выбора, который возвращает следующее:T-SQL Изменение времени Порция из DateTime, используя другую часть DateTime времени

SELECT 
    StartDate 
    ,EndDate 
FROM 
    MyTable 

И результат возвращает следующие данные:

enter image description here

Что мне нужно - это изменить временную часть из StartDate, используя значение из EndDate. Так что только временная часть обеих дат одна и та же, взятая из EndDate. Я должен придерживаться одинаковых, вплоть до миллисекунд.

Возможно ли использование функции DATEADD?

ответ

1

Использование DateAdd и DateDiff:

SELECT DATEADD(DAY, DATEDIFF(DAY, EndDate, startDate), EndDate) As StartDate, 
     EndDate 
FROM MyTable 

Я добавляю разницу дней между датой начала и датой окончания. Поскольку DateDiff имеет более позднюю дату до более ранней даты, она возвращает разницу дней как отрицательное число.

Другой вариант, который я предполагаю, что некоторые люди найдут более читаемым это:

SELECT DATEADD(DAY, -DATEDIFF(DAY, startDate, EndDate), EndDate) As StartDate, 
     EndDate 
FROM MyTable 
+0

Вау, он работает до миллисекунд, я не думаю, что об объединении DATEADD с DATEDIFF. Спасибо – Raffaeu

+1

да, все, что вы меняете, это количество дней, часть времени никак не связана с этим. –