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: donc le temps est bon mais la date est fausse. Il devrait être 2012-02-13 au lieu de 2012-02-12. P> Est-ce que je fais quelque chose de mal? Voici ma requête: p> merci p> p>
3 Réponses :
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). update: strong> Si je vous comprends bien, alors vous voulez quelque chose comme ceci: < / p>
Ce que vous devriez faire est d'utiliser d'abord sur_charne, de sorte que votre requête peut ressembler à ceci:
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 B> 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.
SELECT TO_CHAR(NEW_TIME(systimestamp,'EST','PST'), 'DD-MON-YY HH24:MI:SS') AS converted_timestamp_column FROM DUAL;
Cette fonction new_time code> ne fonctionne que pour un très i> nombre limité de fuseaux de fuseau horaire, voir docs.oracle.com/fr/database/oracle/oracle-database/18/sqlrf/ ... .
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 p>
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)