2016-10-17 4 views
2

Этот вопрос может быть продублировать извините за это, как я мог не в состоянии найти решение в Интернете до теперь так я отправляю этоЗаменить только дата часть

Мне нужно создать сервер функции SQL, где мне нужно заменяйте только дату с фактической даты.

Например, если фактическая дата 01/10/2016 означает, что мне нужно обновить фактическую дату до 15/10/2016, только часть даты заменена с 01 на 15. Мне нужно достичь этого, пожалуйста помогите мне в решении этой проблемы, так как я очень новичок в SQL SERVER

+2

Почему бы не использовать функцию DATEADD –

+0

вы просто хотите заменить 01 до 15, или, другими словами, вы добавляете 14day с вашей датой? – Pirate

+0

вы можете отправить любой пример кода snippet @JaydipJ –

ответ

2
DECLARE @actual_due_date INT = 5; 
DECLARE @invoice_date DATETIME = '20161210'; 
DECLARE @due_date DATETIME; 

SET @due_date=DATEADD(DAY,@actual_due_date-DATEPART(DAY,@invoice_date),@invoice_date); 

SELECT @due_date; 

Это распечатывает

2016-12-05 00:00:00.000 
+0

Не работает он добавляет дату, не заменяя его, мне не нужно обновлять его в таблице, а мне нужно хранить и видеть его в переменной –

+0

@MBalajivaishnav. Правильно, это добавляет ** к ** дате. Его эффект заменяет все datetime, чья дата-часть равна 2016-10-01, с 2016-10-15. Причина, по которой мой ответ добавляет дни к дате, которую вы хотите заменить, заключается в том, что это самый эффективный способ сделать это. В других решениях сначала указывается дата, а строка - строка. Это менее эффективно, чем просто добавление разницы в датах. –

+0

SET replace_date = '20161015' не является DATETIME, а также статическим, это BIGINT –

0

Не знаю, что вы действительно пытаетесь hieve, но вы можете попробовать следующее:

DECLARE @OtherDate DATETIME = {ts'2016-02-05 12:00:00'}; --Some day in February, 12 o'clock 

DECLARE @actualDate DATETIME = GETDATE(); --current day and time 


--This comes back with the other date, but the actual time 
SELECT CAST(CAST(@OtherDate AS date) AS datetime) + CAST(CAST(@actualDate AS time) AS datetime); 
0

Не знаете цели, почему вы ее заменяете.

Вот один из способов:

Declare @date date = '01/10/2016' 

Select Replace(Convert(varchar(20), @date, 101), '01/', '15/') AS ReplacedDate 
-- 15/10/2016 
0

Вот еще один способ сделать это:

DECLARE @oldDate DATETIME = '2016-10-17 10:29:22' 
DECLARE @replacingDate DATE = '2016-10-15' 
DECLARE @newDate DATETIME 
SET @newDate = CONVERT(datetime, CONVERT(varchar, @replacingDate)+' '+ LEFT(CONVERT(varchar, CONVERT(time, @oldDate)), 8)) 
SELECT @newDate 

--UPDATE TableA 
--SET FieldX = CONVERT(datetime, CONVERT(varchar, @replacingDate)+' '+ LEFT(CONVERT(varchar, CONVERT(time, @oldDate)), 8)) 
--WHERE SomeCondition