2013-03-29 16 views
17

Mam datę 2013-12-14 05: 00: 00.000 w moim stole.Aktualizuj tylko czas z mojego pola Datetime w sql

Teraz chcę zaktualizować tylko czas tej daty. E.G do 2013-12-14 04: 00: 00.000

Czy istnieje zapytanie o aktualizację tylko czasu z pola datetime?

+0

W SQL Server ** 2008 **, byłoby dużo łatwiej, gdybyś przechowywał porcję w kolumnie 'TIME' osobno, jeśli chcesz ją zaktualizować osobno. –

+1

@marc_s jeśli używałeś, powiedzmy, implementację ORM, czy nie byłoby to dość bolesne, ponieważ potrzebowałbyś widoku łączącego oba pola? Prawdopodobnie nie jest to związane z powyższym pytaniem. Jestem po prostu ciekawy :) – david99world

+0

Nie podałeś wystarczającej ilości informacji, aby zrozumieć, na czym polega problem. Dlaczego nie możesz po prostu zaktualizować wartości kolumny do "2013-12-14 04: 00: 00.000"? A może chcesz ustawić wartość czasu na 04:00 niezależnie od daty? A może chcesz odjąć jedną godzinę od aktualnego czasu lub ...? –

Odpowiedz

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

Albo ten

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

Eleganckie i użyteczne rozwiązanie, działa jak urok. +1 –

+0

fajne rozwiązanie! – 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)) 

WYJŚCIE: 10.03.2017 09: 30: 00,000

1

użytkownika poniżej jednego do aktualizacji Czas tylko dla datetime kolumna -

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  
Powiązane problemy