2013-03-29 28 views
17

Benim tablomda bir tarih var 2013-12-14 05: 00: 00.000.Güncelleme süremden sadece bir süre sonra sql

Şimdi yalnızca bu tarihin saatini güncellemek istiyorum. E.G to 2013-12-14 04: 00: 00.000

Sadece datetime alanından zaman güncellemek için herhangi bir sorgu var mı?

+0

SQL Server ** 2008 **, çok daha kolay olurdu. –

+1

@marc_s bir ORM uygulaması kullanıyor olsaydınız, bu iki alanın birleştirildiği bir görünüme ihtiyacınız olduğu için bu oldukça acı verici olmaz mıydı? Bu muhtemelen yukarıdaki soru ile ilgili değil sadece merak ediyorum :) – david99world

+0

Sorunun ne olduğunu anlamak için yeterli bilgi içermediniz. Neden sadece sütunun değerini "2013-12-14 04: 00: 00.000" olarak güncelleyemiyorsunuz? Ya da tarihin ne olduğuna bakmaksızın saat değerini 04: 00'a ayarlamak ister misiniz? Veya şu anki saatten bir saat çıkarmak mı istersiniz? –

cevap

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

Ya da bu

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

Zarif ve kullanışlı bir çözüm, bir çekicilik gibi çalışır. +1 –

+0

güzel çözüm! – 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)) 

ÇIKIŞ: 2017/03/10 09: 30: 00.000

1

Kullanıcı birinin altında güncellemek için sadeceiçin Zamansütun - ayrı olarak güncellemek gerekirse, ayrı bir `Zamanı 'sütunundaki saat bölümünü depolandığı takdirde

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  
İlgili konular