2
votes

Résultat étrange en utilisant Oracle trunc ()?

Pourquoi

sélectionnez trunc (to_date ('23 / 06/2017 ',' DD / MM / YYYY '),' DAY ') de dual;

renvoie

19.06.17

au lieu de prévu

23.06.17 ?

Nous sommes sur Oracle 11.


4 commentaires

'DAY' tronque au début de la semaine: docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlr‌ f / … - mais la question est de savoir pourquoi utilisez-vous trunc () pour commencer? sélectionnez to_date ('23 / 06/2017 ',' JJ / MM / AAAA ') de double; renverrait déjà ce que vous voulez


@a_horse_with_no_name sélectionnez trunc (END_TIME, 'DD') de KROWA où KROWA est un alias de WITH clouse. Lorsque je remplace trunc () par to_date () j'obtiens l'image au format de date se termine avant de convertir toute la chaîne d'entrée


@adakozu - vous êtes confus en passant une date ou une chaîne. Votre question montre que vous commencez à partir d'une chaîne et que vous la convertissez en une date - avec l'heure à minuit - ce qui rend le trunc () inutile. Si vous partez vraiment d'une variable / colonne de date, alors le tronc a plus de sens (mais avec DD pas DAY); mais ne passez pas quelque chose qui est déjà une date dans to_date () . Ce n'est pas ce qui a été suggéré. Nous ne pouvons continuer que sur ce que vous nous avez dit que vous faites - nous ne pouvons pas être blâmés pour offrir des conseils qui ne conviennent pas à ce que vous faites vraiment si cela est très différent ...


@AlexPoole J'apprécie tous les conseils. Je garderai mes déclarations plus claires à l'avenir.


3 Réponses :


0
votes

Votre format est incorrect, devrait être Format DD :

select trunc(to_date('23/06/2017','DD/MM/YYYY'), 'DD') from dual;

Modèles de format de date pour les fonctions de date ROUND et TRUNC

DDD DD J Jour


0 commentaires

4
votes

Le format DAY renvoie le jour de départ de la semaine le plus proche. Selon la configuration de votre base de données, cela peut être un dimanche, un lundi (dans votre cas) ...

Vous avez probablement besoin du format DD à la place.

Documentation Oracle


0 commentaires

1
votes

DAY tronque au DIMANCHE le plus proche [1 ]

vous pouvez utiliser DD.

select trunc(to_date('23/06/2017','DD/MM/YYYY'), 'DD') from dual;


1 commentaires

Ce n'est pas toujours le dimanche le plus proche partout dans le monde et dépend du paramètre NLS_TERRITORY . Essayez ALTER SESSION SET nls_territory = 'ROYAUME-UNI'; , la date de sortie sera un lundi.