2016-10-17 65 views
2

這個問題可複製會後悔的,因爲我無法找到到目前爲止所以我發佈這個僅更換日期部分

我需要創建,我需要一個SQL服務器功能,在網絡的任何解決方案只替換實際日期中的日期部分..

例如,如果實際日期是01/10/2016意味着我需要更新實際日期到15/10/2016僅將日期部分從01更換爲15我需要實現此目的,請幫助我解決這個問題,因爲我對SQL SERVER很新穎

+2

爲什麼不使用DATEADD函數 –

+0

你只想要將01替換爲15,或換句話說,您要添加14天s到你的約會? – Pirate

+0

你可以請任何示例代碼片段@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更準確地說,它將**添加到**日期。它的效果是取代所有日期時間的日期部分等於2016-10-01,2016-10-15。我的回答爲你想要取代的日期增加了幾天的原因是它是這樣做的最有效的方式。其他解決方案先將日期轉換爲字符串,然後再撥動字符串。這比簡單地添加日期差異效率更低。 –

+0

SET replace_date ='20161015'不是一個DATETIME,也是一個靜態的BIGINT –

0

不知道,你真的試圖交流但你可以試試這個:

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