J'essaie de convertir un champ datetime (createTime) de son format par défaut 2012-10-06 02: 29: 37.243 en am/pm, donc j'utilise
convert(varchar, CreateTime, 100) as CreateTime
et obtenez 6 oct 2012 04h29 .
Jusqu'ici tout va bien, mais dans la même déclaration, je veux soustraire 4 heures et ensuite afficher le champ (questions GMT).
J'ai parcouru quelques articles ici, mais je n'ai rien trouvé qui puisse le faire en une seule déclaration.
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 requête ci-dessus qui utilise dateadd
soustraira toujours 4 heures. Si votre objectif est de convertir une date/heure arbitraire de l'heure UTC en heure locale, le processus est plus compliqué car le décalage que vous devez ajouter/soustraire dépend de la date/heure d'origine. Une valeur unique telle que -4 ne fonctionnera pas toujours. Voici quelques idées pour traiter le cas général:
Pour les personnes qui veulent soustraire des jours et des heures
declare @createTime datetime = '2012-10-06 02:29:37.243';
select @createtime as originaltime, dateadd(day, -4, dateadd(hour,-1,@createtime))as minus4daysandhour
Pour SQL Server, vous pouvez utiliser datetimeoffset
Pour mysql, utilisez CONVERT_TZ function pour convertir en un fuseau horaire différent.