web-dev-qa-db-fra.com

Mettre à jour uniquement l'heure de mon champ Datetime dans SQL

J'ai une date 2013-12-14 05: 00: 00.000 dans mon tableau.

Maintenant, je veux mettre à jour que l'heure de cette date. De la Géorgie au 2013-12-14 04: 00: 00.000

Existe-t-il une requête pour mettre à jour uniquement l'heure du champ datetime?

22
omkar patade
UPDATE MyTable 
SET MyDate = DATEADD(HOUR, 4, CAST(CAST(MyDate AS DATE) AS DATETIME)) 

Ou ca

UPDATE MyTable 
SET MyDate = DATEADD(HOUR, 4, CAST(FLOOR(CAST(MyDate AS FLOAT)) AS DATETIME))
43
Yuriy Rozhovetskiy

Utilisez l'utilisateur ci-dessous pour mettre à jour la colonne Heure uniquement pour la variable datetime

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       
6
Sumanth
UPDATE TABLE_NAME SET DATETIME_FIELD = CAST(CAST(CONVERT(DATE, DATETIME_FIELD,101) AS VARCHAR) + ' 2' + ':' +  '22' AS DATETIME) WHERE (OUR_CONDTTION)
3
Samina
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))

SORTIE: 2017-03-10 09: 30: 00.000

1

Si vous ne faites que mettre à jour une partie particulière de la date et l'heure, vous pouvez utiliser SMALLDATETIMEFROMPARTS comme:

UPDATE MyTable 
SET MyDate = SMALLDATETIMEFROMPARTS(YEAR(MyDate), MONTH(MyDate), DAY(MyDate),YEAR(MyDate), <HoursValue>, <MinutesValue>) 

Dans d'autres cas, il peut être nécessaire de copier des parties de date/heure ou de ne mettre à jour que certaines parties de la date et heure:

UPDATE MyTable 
SET MyDate = SMALLDATETIMEFROMPARTS(YEAR(MyDate), MONTH(MyDate), DAY(MyDate),YEAR(MyDate), DATEPART(hour, MyDate), DATEPART(minute, MyDate)) 

Reportez-vous à références d'API associées à la date et l'heure de SQL Server pour d'autres fonctions de ce type.

0
Nabster
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
Amir Alizade