2015-11-24 1 views
0

Aidez-moi s'il vous plaît avec le prochain problème. J'ai une chaîne de date et heure au format suivant (ISO 8601): 1999-12-31T23: 59: 59 et j'ai besoin de la convertir en valeur TIMESTAMP. Le principal problème dans le caractère séparateur 'T'. J'ai essayé la requête suivante:Chaîne DB2 Cast DateTime avec séparateur "T"

SELECT TIMESTAMP_FORMAT('1999-12-31T23:59:59','YYYY-MM-DD HH24:MI:SS') FROM ROMAN.EMPLOYEE; 

et utiliser des chaînes de format différents, tels que, AAAA-MM-DDTHH24: MI: SS, AAAA-MM-JJ "T" HH24: MI: SS.

Pourriez-vous me fournir le moyen correct de lancer ce type de chaînes sans aucun remplacement de caractères et sous-chaînes. Merci d'avance!

Répondre

1

Il n'existe pas de fonction intégrée pouvant formater un horodatage au format ISO-8601 dans DB2 pour Linux/UNIX/Windows.

Comme vous l'avez probablement deviné, vous pouvez le faire avec REMPLACER:

select 
    TIMESTAMP_FORMAT(REPLACE('1999-12-31T23:59:59','T',' '), 'YYYY-MM-DD HH24:MI:SS') 
from 
    ROMAN.EMPLOYEE; 

Il est trivial de créer un utilisateur fonction définie (UDF) pour gérer cette mise en forme aussi bien pour vous que vous n'avez pas sortir cette longue chaîne dans chaque requête.

Il peut également possible de le faire via XQuery avec et xs:dateTime, bien que cela serait encore plus de code que d'intégrer simplement REPLACE dans l'appel à TIMESTAMP_FORMAT.