2017-10-21 27 views
1

Si j'ai des dates dans ce format: Sep-29-07 13:45:00 PDTComment convertir PDT en un objet date-heure dans Oracle sql?

Comment convertir cette date en un objet Date dans Oracle 11g? Je l'ai essayé:

SELECT TO_DATE(PublishDate, 'MON-DD-YY HH24:MI:SS') 
FROM Order; 

Mais je reçois une erreur disant:

ORA-01830: image de format de date se termine avant de convertir la chaîne d'entrée entière

+0

Avez-vous d'autres dates de fuseau horaire? Si non, envisagez-vous de les soutenir à l'avenir? – GurV

+0

@GurwinderSingh Non, je n'ai aucun autre fuseau horaire. Chaque ligne de la table possède cette valeur en tant que valeur public_date. – CapturedTree

Répondre

1

Si vous avez un seul dates fuseau horaire, vous pouvez simplement ignorer la partie fuseau horaire en utilisant:

select to_date(PublishDate, 'MON-DD-YY HH24:MI:SS "PDT"') 
from Orders; 

Si vous envisagez de prendre en charge plusieurs fuseaux horaires, stockez-les au format timestamp with time zone. utilisez l'abréviation de fuseau horaire correcte (PST au lieu de PDT - See this) et convertissez la chaîne, utilisez to_timestamp_tz.

select to_timestamp_tz(PublishDate, 'MON-DD-YY HH24:MI:SS TZR') 
from Orders; 

ou peut-être de les convertir en un seul fuseau horaire local. See this answer for that

+1

La deuxième solution ne fonctionne pas. –

1

Vous pouvez ignorer le fuseau horaire en utilisant:

SELECT TO_DATE(SUBSTR(PublishDate, 1, length(PublishDate) - 4), 'MON-DD-YY HH24:MI:SS') 

Cependant, si vous voulez gérer différents fuseaux horaires, vous devez enregistrer le format standard, quelque chose comme 'America/Los_Angeles'.

Par exemple:

SELECT TO_TIMESTAMP_TZ(PublishDate, 'MON-DD-YY HH24:MI:SS TZR') 
from (select 'Sep-29-07 13:45:00 America/Los_Angeles' as PublishDate from dual) x; 

Vous pouvez modifier cette 'PDT' cela avec, mais ce n'est pas acceptable par lui-même.