En Oracle DATE
datatypen har ingen tidszon - du behöver en TIMESTAMP WITH TIMEZONE
datatyp:
SELECT TO_TIMESTAMP_TZ(
'Thu Nov 24 15:20:52 CET 2016',
'DY MON DD HH24:MI:SS TZR YYYY'
)
FROM DUAL
Om du vill konvertera till en DATE
(och tidszonsregionen är alltid CET
) så kan du använda:
SELECT TO_DATE(
'Thu Nov 24 15:20:52 CET 2016',
'DY MON DD HH24:MI:SS "CET" YYYY'
)
FROM DUAL
Om du vill ha det som en DATE
datatyp och för att respektera tidszonen i den ursprungliga strängen måste du (1) konvertera den till en TIMESTAMP WITH TIMEZONE
data typ; (2) konvertera det värdet till en standardiserad tidszon (UTC används ofta för detta); sedan (3) konvertera det till ett datum:
SELECT CAST(
TO_TIMESTAMP_TZ(
'Thu Nov 24 15:20:52 CET 2016',
'DY MON DD HH24:MI:SS TZR YYYY'
)
AT TIME ZONE 'UTC'
AS DATE
)
FROM DUAL;
Vilket kommer att mata ut datumet 2016-11-24 14:20:52
(UTC-representationen av inmatningsdatumet).