web-dev-qa-db-fra.com

Oracle Convert TIMESTAMP with Timezone to DATE

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.

11
Nikita Petrov

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 () .

15
Nick Krasnov
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
0
Pancho

pour lancer l'horodatage à ce jour:

cast (registrationmaster.Stamp5DateTime as date)> = '05 -05-2018 'AND cast (registrationmaster.Stamp5DateTime as date) <= '05 -05-2018'

0
Bhushan Shimpi