7
votes

Conversion des fuseaux horaires Oracle (en utilisant depuis_tz)

J'essaie de convertir une heure (date + heure) d'un fuseau horaire à une autre. Dans la requête ci-dessous, j'essaie de convertir une fois d'EST ("Amérique / NEW_YORK") à PST ("Amérique / Los_Angeles"). La requête fonctionne en partie; Les résultats: xxx

donc le temps est bon mais la date est fausse. Il devrait être 2012-02-13 au lieu de 2012-02-12.

Est-ce que je fais quelque chose de mal? Voici ma requête: xxx

merci


8 commentaires

Avez-vous essayé d'ajouter «PM» à la chaîne de format?


Oui, j'ai essayé avec "PM" et j'ai les mêmes résultats.


Juste pour être sûr - basey_date_date est une chaîne non une date, non? Parce que, sinon elle le convertira selon NLS_TIMESTAMP_FORMAT, qui pourrait être "AAAAY-MM-DD HH24: MI: SS"


Database_Date est le nom du champ contenant la date que je souhaite convertir.


D'accord. Il suffit de modifier NLS_DATE_FORMAT: Alter Session Set Nls_Date_Format = 'AAAAY-MM-DD HH: MI: SS PM' et ça marche.


N'utilisez pas de TO_TMESTAMP sur les dates, utilisez-la d'abord sur_charne (au lieu de changer NLS_Date_Format)


Pourrait me guider un peu sur celui-là. Comment puis-je utiliser TO_CHAR au lieu de TO_TIMESTAMP dans ma requête?


l'a ajouté comme une réponse (en fait, vous avez fait quelque chose comme ça dans votre requête)


3 Réponses :


7
votes

TO_TIMESTAMP () Obtient une chaîne (Varchar2, Char ...) Si vous essayez de lui donner une date, alors Oracle le convertira en une chaîne conformément à NLS_Date_Format, qui peut varier dans différents environnements et renvoyer des résultats inattendus (comme dans ce cas).
Ce que vous devriez faire est d'utiliser d'abord sur_charne, de sorte que votre requête peut ressembler à ceci: xxx

update: Si je vous comprends bien, alors vous voulez quelque chose comme ceci: < / p> xxx


4 commentaires

Merci beaucoup pour l'explication et l'aide avec la requête. Vraiment apprécié.


UN B. Cade: J'ai une autre question si cela ne vous dérange pas. Dans ma requête, je convertis le temps de "Amérique / New_york" à "Amérique / Los_Angeles". Est-il également possible d'obtenir l'abréviation de fuseau horaire ('PST') au-dessus de la conversion du temps. Donc, si l'heure à New York est 2012-02-14 à 01h00, je pourrais obtenir 2012-02-14 10h00 PST pour Los Angeles.


Si je vous comprends bien, vous ne voulez pas avoir une date, mais un varchar2 qui montre la date formatée et comprend à la fin de l'abréviation. Donc, vous devez supprimer le haut "TO_Date" (puisque vous ne voulez pas une date) et ajoutez au format de TO_CHAR "TZD"


Merci encore ! C'est exactement ce dont j'avais besoin.



2
votes
SELECT TO_CHAR(NEW_TIME(systimestamp,'EST','PST'), 'DD-MON-YY HH24:MI:SS') AS converted_timestamp_column FROM DUAL;

1 commentaires

Cette fonction new_time ne fonctionne que pour un très nombre limité de fuseaux de fuseau horaire, voir docs.oracle.com/fr/database/oracle/oracle-database/18/sqlrf/ ... .



2
votes

S'il vous plaît essayer cela aussi. Il s'agit d'une fonction à cet effet dans Oracle

https://docs.oracle.com/cd/b28359_01/olap.111/b28126/dml_functions_2036.htm xxx


0 commentaires