J'ai une base de données avec le fuseau horaire +04:00 (Europe/Moscow)
et j'ai besoin de convertir une chaîne au format YYYY-MM-DD"T"HH24:MI:SSTZH:TZM
En type de données DATE
dans Oracle 11g.
En d'autres termes, j'ai une chaîne 2013-11-08T10:11:31+02:00
Et je veux la convertir en type de données DATE
(dans le fuseau horaire local de la base de données +04:00 (Europe/Moscow)
).
Pour la chaîne 2013-11-08T10:11:31+02:00
, La transformation souhaitée doit renvoyer le type de données DATE
avec la date 2013-11-08 12:11:31
(C'est-à-dire avec la transformation du fuseau horaire local de l'heure en +04:00 (Europe/Moscow)
). Le fuseau horaire de la chaîne peut être différent et +02:00
Dans la chaîne ci-dessus n'est qu'un exemple.
J'ai essayé de le faire avec le type de données TIMESTAMP
, mais sans succès avec la transformation du fuseau horaire.
to_timestamp_tz()
la fonction avec la clause at time zone
peut être utilisée pour convertir votre chaîne littérale en une valeur de type de données timestamp with time zone
:
SQL> with t1(tm) as(
2 select '2013-11-08T10:11:31+02:00' from dual
3 )
4 select to_timestamp_tz(tm, 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM')
5 at time zone '+4:00' as this_way
6 , to_timestamp_tz(tm, 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM')
7 at time zone 'Europe/Moscow' as or_this_way
8 from t1
9 /
Résultat:
THIS_WAY OR_THIS_WAY
----------------------------------------------------------------------------
2013-11-08 12.11.31 PM +04:00 2013-11-08 12.11.31 PM EUROPE/MOSCOW
Et puis, nous utilisons la fonction cast()
pour produire une valeur de type de données date
:
with t1(tm) as(
select '2013-11-08T10:11:31+02:00' from dual
)
select cast(to_timestamp_tz(tm, 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM')
at time zone '+4:00' as date) as this_way
, cast(to_timestamp_tz(tm, 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM')
at time zone 'Europe/Moscow' as date) as or_this_way
from t1
This_Way Or_This_Way
------------------------------------------
2013-11-08 12:11:31 2013-11-08 12:11:31
En savoir plus sur la clause au fuseau horaire et la fonction to_timestamp_tz () .
SELECT
CAST((FROM_TZ(CAST(timezonefield AS TIMESTAMP),'GMT') AT TIME ZONE 'CET') AS DATE)
FROM table;
Convertit un horodatage en GMT à ce jour en heure d'Europe centrale
si vous voulez que votre horodatage avec fuseau horaire soit converti en une date synchronisée avec "sysdate", utilisez ce qui suit:
select CAST(to_timestamp_tz('2013-11-08T10:11:31-02:00',
'yyyy-mm-dd"T"hh24:mi:sstzh:tzm') at time zone to_char(systimestamp,
'tzh:tzm') AS DATE)
from dual
pour lancer l'horodatage à ce jour:
cast (registrationmaster.Stamp5DateTime as date)> = '05 -05-2018 'AND cast (registrationmaster.Stamp5DateTime as date) <= '05 -05-2018'