web-dev-qa-db-fra.com

SQL convertir date-heure et soustraire heures

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.

12
bobsingh1
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:

Conversion efficace des dates entre l'heure UTC et l'heure locale (c'est-à-dire l'heure PST) dans SQL 2005

21
cbranch

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
0
mzonerz

Pour SQL Server, vous pouvez utiliser datetimeoffset

Pour mysql, utilisez CONVERT_TZ function pour convertir en un fuseau horaire différent.

0
Anshu