IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Convertir date grégorien en hijri


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 99
    Points : 61
    Points
    61
    Par défaut Convertir date grégorien en hijri
    Bonjour,

    je travaille sur une application delphi ,base de donnée 11g.
    Je veux convertir la date grégorien en date hijri, pour cela j'ai crée une fonction.
    quand j'ai exécute la fonction pour les dates entre decembre 2013 et janvier 2014, l'erreur suivante est renvoyée :

    ora-01830 date format picture ends before converting entire input string

    mais pour les dates de la meme année ca marche correctement.

    Merci

  2. #2
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2012
    Messages : 127
    Points : 339
    Points
    339
    Par défaut
    Bonjour,

    Il est inutile de créer une fonction pour cela. Le type de données DATE contient en fait une valeur numérique, qui est affichée différemment selon le format de date ou le calendrier utilisé. Les fonctions de conversions acceptent des paramètres qui permettent de contourner le paramétrage par défaut.

    Si votre base de données a comme calendrier par défaut Arabic Hijrah, et que vous avez une chaîne de caractère contenant une date grégorienne, alors vous la convertissez au format DATE avec la fonction to_date, simplement en lui indiquant le format de date et le calendrier à utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select to_date('19/12/2013', 'DD/MM/YYYY','NLS_CALENDAR=''Gregorian''')
    from dual;
    Et une fois que l'on a une date au format DATE, elle peut être affichée dans le calendrier qu'on désire. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT
        to_char(sysdate,'DD MONTH YYYY','NLS_CALENDAR=''Gregorian''')  "Date grégorienne",
        to_char(sysdate,'DD MONTH YYYY','NLS_CALENDAR=''English Hijrah''')  "Date Hijrah (version anglaise)",
        to_char(sysdate,'DD MONTH YYYY','NLS_CALENDAR=''Arabic Hijrah''') "Date Hijrah (version arabe)" 
    FROM dual;
    Et si vous ne voulez pas préciser le paramètre NLS_CALENDAR à chaque fois, vous pouvez le fixer au niveau de la session, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alter session set NLS_CALENDAR='English Hijrah';

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 99
    Points : 61
    Points
    61
    Par défaut
    merci pour la réponse.

    le problème se pose quand je spécifie deux date entre deux années différentes(20/12/2013 et 05/01/2014 par exemple) sinon pour une seule date ça marche.

    ci-joint le cors de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    create or replace function test(dt_deb in date, dt_fin in date) return number is
    v_nb  number;
    v_date date;
    v_datH date;
     
    begin
       v_nb:=0;
       v_date:= dt_deb;
     
      if dt_deb<= dt_fin then
        while (v_date>= dt_deb) and (v_date<= dt_fin)
          loop
            select to_char(to_date(v_date),'DD/MM/YYYY','nls_calendar=''Arabic Hijrah''')
            into v_datH
            from dual;
        if (substr(v_datH,1,5) in ('01/01','10/01', '12/03', '01/10', '02/10','10/12','11/12')) and
            (upper(trim(to_char(to_date(TO_char(v_date,'DD/MM/YYYY'),'DD/MM/YYYY'),'DAY'))) not in ('VENDREDI','SAMEDI')) then
         v_nb:= v_nb+1;
        end if;
     
        v_date := v_date + 1;
        end loop;
     
       return (v_nb);
      end if;
      end test;


    merci

  4. #4
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Bonjour à vous Sarah
    2 choses sur votre fonction :

    1 vous déclarez v_datH de type Date , or vous la gérez en "Chaîne de caractère"
    à transformer en

    et de la même manière : je ne vois pas trop l'utilité d'un to_date(d'une date)
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            SELECT to_char(to_date(v_date),'DD/MM/YYYY','nls_calendar=''Arabic Hijrah''')
            INTO v_datH
            FROM dual;
    Peux allègrement être remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v_datH := to_char(v_date,'DD/MM/YYYY','nls_calendar=''arabic hijrah''');
    Signé : Capitaine Jean-Luc Picard

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 99
    Points : 61
    Points
    61
    Par défaut
    Merci, le problème est réglé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertir Date Et Horaire
    Par yacineC dans le forum Excel
    Réponses: 3
    Dernier message: 15/10/2007, 14h19
  2. [Dates] Convertir date JJ.MM.AA en RFC 822 ?
    Par seebastien dans le forum Langage
    Réponses: 10
    Dernier message: 17/06/2007, 22h49
  3. Convertir Date sous Delphi vers Date sous MySQL
    Par forzaxelah dans le forum Bases de données
    Réponses: 12
    Dernier message: 21/07/2006, 12h06
  4. Convertir date en int
    Par semonetienne dans le forum C++
    Réponses: 15
    Dernier message: 26/04/2006, 11h04
  5. [VBScript] Convertir date en string
    Par rabi dans le forum VBScript
    Réponses: 4
    Dernier message: 26/12/2005, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo