web-dev-qa-db-fra.com

ORACLE Casting DATE en TIMESTAMP AVEC TIME ZONE AVEC OFFSET

J'ai besoin de convertir une valeur DATE dans une requête en TIMESTAMP WITH TIME ZONE, mais actuellement j'obtiens la TimeZone Region ('Europe/Paris') qui n'est pas valide pour être utilisée par EF.

Par exemple, lors de cette opération:

select CAST(FECHA AS TIMESTAMP WITH TIME ZONE) from test;

J'obtiens actuellement cette sortie:

07/03/14 09:22:00,000000000 EUROPE/PARIS

Mais j'ai besoin que ce soit comme:

07/03/14 09:22:00,000000000 +01:00

Une idée de comment y parvenir?

10
Farlop

Vous pouvez convertir le DATE en TIMESTAMP, puis utiliser FROM_TZ pour convertir cet horodatage en horodatage avec fuseau horaire:

SQL> SELECT from_tz(CAST (SYSDATE AS TIMESTAMP), '+01:00') tz FROM dual;
TZ
-------------------------------------------------
07/03/14 09:47:06,000000 +01:00
17
Vincent Malgrat

Avec la solution @Vincent Malgrat, vous devez obtenir la TIMEZONE_HOUR, puis la formater pour l'utiliser dans votre requête. Je ne sais pas s'il y a une chance de le faire automatiquement.

Je peux vous suggérer d'imbriquer certaines fonctions. Ce n'est pas la solution la plus propre mais ça marche pour moi

SELECT TO_TIMESTAMP_TZ(TO_CHAR(CAST(FECHAHORA AS TIMESTAMP WITH TIME ZONE), 'DD-MM-YY HH24:MI:SS TZH:TZM'), 'DD-MM-YY HH24:MI:SS TZH:TZM' )FROM TEST;

Et le résultat sera quelque chose comme

03/03/14 09:58:02,000000000 +01:00

Cordialement!

6
RandomUser