2012-10-06 61 views
11

Estoy tratando de convertir un campo (createTime) de fecha y hora de su valor predeterminado 10/06/2012 02: 29: 37.243 a formato AM/PM, así que usode fecha y hora de convertir SQL y restar horas

convert(varchar, CreateTime, 100) as CreateTime 

y consigo 6 de octubre 2012 4:29 a.m..

Hasta ahora todo bien, pero en la misma declaración quiero restar 4 horas y luego mostrar el campo (problemas GMT).

He leído algunas publicaciones aquí pero no he podido encontrar nada que pueda hacerlo en una sola declaración.

Respuesta

21
declare @createTime datetime = '2012-10-06 02:29:37.243'; 

-- original value, default formatting 
select @createTime; 

-- formatted 
select convert(varchar, @createTime, 100); 

-- subtract 4 hours, formatted 
select convert(varchar, dateadd(hour, -4, @createTime), 100); 

La consulta anterior que utiliza dateadd siempre habrá restar 4 horas. Si su objetivo es convertir una fecha y hora arbitraria de UTC a hora local, entonces es más complicado porque la compensación que necesita para sumar/restar depende de la fecha y hora original. Un solo valor como -4 no siempre funcionará. Aquí están algunas ideas para tratar con el caso general:

Effectively Converting dates between UTC and Local (ie. PST) time in SQL 2005

+0

Gracias, select convert (varchar, dateadd (hora, -4, @ createTime), 100); Hizo el truco – bobsingh1

0

Para la gente que quiere restar días y horas

declare @createTime datetime = '2012-10-06 02:29:37.243'; 
select @createtime as originaltime, dateadd(day, -4, dateadd(hour,-1,@createtime))as minus4daysandhour 
Cuestiones relacionadas