2016-10-17 60 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