2013-03-29 88 views
17

我的表中有一個日期2013-12-14 05:00:00:00。更新從我的日期時間字段在sql中的唯一時間

現在我想只更新該日期的時間。 E.G到2013-12-14 04:00:00.000

是否有任何查詢只更新日期時間字段的時間?

+0

在SQL Server ** 2008 **中,如果單獨將時間部分存儲在「TIME」列中,如果需要單獨更新,則會更容易。 –

+1

@marc_s如果您使用的是ORM實現,那麼這會不會很痛苦,因爲您需要將這兩個字段連接起來的視圖?這可能與上面的問題無關,我只是好奇:) – david99world

+0

您沒有包含足夠的信息來了解問題所在。爲什麼你不能只將列的值更新爲「2013-12-14 04:00:00:00」?或者是否要將時間值設置爲04:00而不管它是哪天?或者你想從當前時間減去一小時還是......? –

回答

37
UPDATE MyTable 
SET MyDate = DATEADD(HOUR, 4, CAST(CAST(MyDate AS DATE) AS DATETIME)) 

或者這

UPDATE MyTable 
SET MyDate = DATEADD(HOUR, 4, CAST(FLOOR(CAST(MyDate AS FLOAT)) AS DATETIME)) 
+0

優雅而有用的解決方案,它的作用就像一個魅力。 +1 –

+0

不錯的解決方案! – nicolas

1
UPDATE TABLE_NAME SET DATETIME_FIELD = CAST(CAST(CONVERT(DATE, DATETIME_FIELD,101) AS VARCHAR) + ' 2' + ':' + '22' AS DATETIME) WHERE (OUR_CONDTTION) 
0
DECLARE @d datetime; 
SELECT @d = DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0); 

DECLARE @t time(7); 
SET @t = CAST('10:10:10' AS time); 

SELECT CONVERT(datetime, CONVERT(varchar(10), CONVERT(date, @d, 101)) + ' ' + CONVERT(varchar(8), @t)); 
0
DECLARE @Time as TIME; 
DECLARE @Date as DATETIME; 

SELECT @Time = CONVERT(TIME, '2016-01-01 09:30:00.000'); 
SELECT @Date = CONVERT(date, GETDATE()); --2017-03-10 16:37:34.403 

SELECT DATEADD(MINUTE, DATEPART(MINUTE, @Time), DATEADD(HH, DATEPART(HOUR, @Time), @Date)) 

OUTPUT: 2017年3月10日09:30:00.000

1

用戶下面的一個更新時間僅限於datetime column -

select CONVERT(varchar(10),datecolumn, 120) + ' 12:34:56', 
     CONVERT(varchar(10),datecolumn, 120) + ' 00:00:00', 
     RSLV_LTR_INITIAL_DUE_DT, * 
from twhere able1  
相關問題