我有这样的数据:
DATE_CLOTURE
------------
2013-11-29 16:12:11.000
2013-11-29 08:12:11.000
2013-11-29 13:12:11.000
2013-11-29 11:12:11.000
我的期望
DATE_CLOTURE
------------
2013-11-29 18:00:00.000
2013-11-29 12:00:00.000
2013-11-29 18:00:00.000
2013-11-29 12:00:00.000
我的想法是:
UPDATE [Soft8Exp_Server_44].[dbo].[LETTRE_VOIT_FINAL]
SET [DATE_CLOTURE] = ??? here set 12
WHERE datepart(hour,date_cloture) > 6 and datepart(hour,date_cloture) <= 12
UPDATE [Soft8Exp_Server_44].[dbo].[LETTRE_VOIT_FINAL]
SET [DATE_CLOTURE] = ??? here set 18
WHERE datepart(hour,date_cloture) > 12 and datepart(hour,date_cloture) <= 18
答案 0 :(得分:0)
这是一个解决方案,但它可能不干净(我喜欢使用演员,但它可能不是最有效的)
它与sql server 2008兼容(我认为日期之前不存在)
select CAST(rtrim(cast(getdate() as date))+ ' 16:00:00' as datetime)
我在我的getdate上使用日期只保留日期,我使用rtrim作为char进行转换(这很糟糕,但很快写入)然后我将日期连接到日期时间。
而不是2更新,只做一个有案例的时候,它更好
答案 1 :(得分:0)
试试这个:
这将删除日期的时间部分:
UPDATE LETTRE_VOIT_FINAL
SET date_cloture = DATEADD(dd, 0, DATEDIFF(dd, 0, date_cloture))
(找到方法here)
然后你可以再做一个DATEADD,把你想要的小时数放在你想要的行中:
UPDATE LETTRE_VOIT_FINAL
SET date_cloture = CASE
WHEN datepart(hour, date_cloture) > 6
AND datepart(hour, date_cloture) <= 12
THEN DATEADD(hh, 12, DATEADD(dd, 0, DATEDIFF(dd, 0, date_cloture)))
WHEN datepart(hour, date_cloture) > 12
AND datepart(hour, date_cloture) <= 18
THEN DATEADD(hh, 18, DATEADD(dd, 0, DATEDIFF(dd, 0, date_cloture)))
END