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 :

Format date/timestamp .. [10gR2]


Sujet :

SQL Oracle

  1. #1
    Invité
    Invité(e)
    Par défaut Format date/timestamp ..
    Bonjour,

    Je suis en train de créer une base de donnée ou je dois gérer un service de location.
    J'ai un problème pour enregistrer les dates et les heures, dans ma table location, j'ai un attribut dep (départ) et un autre ret (retour). Je souhaite le mettre et le voir apparaître entièrement dans sql.
    Par exemple une location commence le "15-06-2013 15 00 00" et se termine le "18-06-2013 10 00 00".

    J'ai essayé avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into Location values(0001,1,1,2,1100,'CANNES',to_date('15-06-2013 15 00 00', ‘DD-MM-YYYY HH24 MI SS’),to_date('18-06-2013 10 00 00',‘DD-MM-YYYY HH24 MI SS’));
    En ayant au préalable choisi le format "date" dans poweramc pour mes 2 attributs. mais cela ne m'affiche que la date et pas l'heure dans la colonne sur SQL.

    J'ai ensuite essayé en sélectionnant le format: timestamp
    j'obtiens cette erreur:

    SQL> insert into Location values(0001,1,1,2,1100,'CANNES',to_date('15-06-2013 15:00:00', 'DD-MM-YYYY HH24:MI:SS'),to_dat
    e('18-06-2013 10:00:00','DD-MM-YYYY HH24:MI:SS'));
    insert into Location values(0001,1,1,2,1100,'CANNES',to_date('15-06-2013 15:00:00', 'DD-MM-YYYY HH24:MI:SS'),to_date('18
    -06-2013 10:00:00','DD-MM-YYYY HH24:MI:SS'))
    *
    ERREUR Ó la ligne 1 :
    ORA-01858: CaractÞre non numÚrique trouvÚ Ó la place d'un caractÞre numÚrique
    Je comprends pas trop ou est le problème, je suis un peu perdu avec tous ces formats date ...

    De plus, j'ai inséré un check entre dep et rep, en effet la date de ma location de départ ne peut pas etre plus grande que ma date de retour, j'ai donc mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      constraint CKC_DEP_LOCATION check (DEP in ('dep < ret')),
     
      constraint CKC_RET_LOCATION check (RET in ('ret > dep')),
    Mais une location peut être fait à la journée,je ne sais pas si c'est correct ... j’espère qu'il fait la comparaison avec la date puis avec les heures !

    Merci de votre aide, bonne journée.


    Ps: j'ai aussi essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into Location values(0001,1,1,2,1100,'Cannes',to_timestamp('24-12-2013 15:00:00', ‘DD-MM-YYYY HH24:MI:SS’),to_timestamp(24-12-2013 10:00:00', ‘DD-MM-YYYY HH24:MI:SS’));
    Et il m'affiche "caractere non numérique trouvé à la place d'un caractere numérique "
    Dernière modification par Invité ; 18/12/2013 à 13h06.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Désolé, merci pour la modification !

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Tout d'abord une date n'a pas de format c'est un type de données.
    Ensuite vous devez spécifier la liste des colonnes sur lesquels vous allez faire l'insert, c'est plus propre sauf si c'est du one shot.

    0001 est une chaine de caractère, vous devez l'entourer de quote : '0001'.

    Sur Oracle le type de donnée date contient les heures minutes secondes, vous n'avez pas besoin d'un timestamp, l'affichage de la composante horaire n'est qu'une question de paramétrage du client, exemple :
    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
    SQL> select sysdate from dual;
     
    SYSDATE
    --------
    18/12/13
     
    SQL> alter session set nls_date_format='dd/mm/yyyy hh24:mi:ss';
     
    Session altered.
     
    SQL> select sysdate from dual;
     
    SYSDATE
    -------------------
    18/12/2013 14:14:32
     
    SQL>
    Si vous utilisez un client graphique, vérifier dans les options votre paramétrage NLS.

    Qu'est ce que c'est que cette contrainte ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    constraint CKC_DEP_LOCATION CHECK (DEP IN ('dep < ret')),
    Il suffit d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    constraint CKC_DEP_LOCATION CHECK (DEP < RET),
    la composante horaire est évidemment pris en compte dans la validation de la contrainte

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour, merci pour la réponse ...

    En fait dans poweramc j'ai décris dep et rep comme étant de type timestamp

    voila ma table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    create table LOCATION  (
       LOCANUM              NUMBER(4)                       not null,
       CAPINUM              NUMBER(4)                       not null,
       EQUINUM              NUMBER(2)                       not null,
       CLNUM                NUMBER(4)                       not null,
       BANUM                NUMBER(4)                       not null,
       VILLED               VARCHAR2(6)                     not null
          constraint CKC_VILLED_LOCATION check (VILLED in ('Nice','Monaco','Cannes')),
       DEP                  TIMESTAMP                       not null
          constraint CKC_DEP_LOCATION check (DEP in ('dep < ret')),
       RET                  TIMESTAMP                       not null
          constraint CKC_RET_LOCATION check (RET in ('ret > dep')),
       constraint PK_LOCATION primary key (LOCANUM)
    );
    Quand j'essaye d'insérer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Insert into Location(locanum,capinum,equinum,clnum,banum,villed,dep,ret) values('0001',1,1,2,1100,'Cannes',to_timestamp('24-12-2013 15:00:00', ‘DD-MM-YYYY HH24:MI:SS’),to_timestamp(24-12-2013 10:00:00', ‘DD-MM-YYYY HH24:MI:SS’));
    j'ai le message d'erreur suivant :
    "Caractère non numérique trouvé à la place d'un caractère numérique" mais il ne m'indique pas ou ...

    Vous pensez que je dois remodifier dans poweramc et passer de timestamp à date et refaire l'insert avec to_date(...) à la place de to_timestamp ?



    En fait au niveau de la contrainte poweramc me crée la contrainte automatiquement ... il me met tout seul le check IN alors que je veux juste qu'il vérifie que:
    - si la date de départ = date de retour, l'heure de dep < l'heure de retour
    - si la date de départ =/ date de retour, la location peut etre rendu 2 jours après a 08h même si elle a été prise à 11h le jour du départ ...

    Merci pour votre aide, je vous avoue que tout n'est pas très clair pour moi !

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    La définition de votre table n'est pas correct !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE LOCATION  (
       LOCANUM              NUMBER(4)                       NOT NULL,
       CAPINUM              NUMBER(4)                       NOT NULL,
       EQUINUM              NUMBER(2)                       NOT NULL,
       CLNUM                NUMBER(4)                       NOT NULL,
       BANUM                NUMBER(4)                       NOT NULL,
       VILLED               VARCHAR2(6)                     NOT NULL
          constraint CKC_VILLED_LOCATION CHECK (VILLED IN ('Nice','Monaco','Cannes')),
       DEP                  TIMESTAMP                       NOT NULL,      
       RET                  TIMESTAMP                       NOT NULL,
       constraint CKC_DEP_LOCATION CHECK (DEP < ret),
       constraint CKC_RET_LOCATION CHECK (RET > dep),
       constraint PK_LOCATION PRIMARY KEY (LOCANUM)
    );
    Je ne pense pas que vous ayez besoin des millièmes de seconde, le type date est suffisant.

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai bien essayé de rechanger timestamp en date, mais maintenant quand je charge ma table sur sqlplus:

    j'ai un message d'erreur :



    A vrai dire je suis largué ...

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    constraint CKC_DEP_LOCATION CHECK (DEP < ret),
       constraint CKC_RET_LOCATION CHECK (RET > dep),
    C'est un peu redondant, une seule suffit.

    Pour l'autre contrainte, pourquoi ne pas créer une table des villes, et mettre une clef étrangère dans la table des locations ? ce serait plus souple (pas besoin de modifier le schéma si vous voulez gérer une ville supplémentaire) et en sus, vous auriez la liste des villes pour alimenter l'IHM...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    je me suis sorti de mon problème en virant les contraintes check ( in dep<ret) maintenant ma table se crée sans problème.

    Je peux rentrer mes insert sous cette forme sans problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into Location values(5,4,4,4,3100,'Nice',to_date('10-02-2014 08 00 00', ‘DD-MM-YYYY HH24 MI SS’),to_date('12-02-2014 15 00 00',‘DD-MM-YYYY HH24 MI SS’));
    Quand je rentre un insert avec une date de départ et d'arrivée incohérente genre 01/01/12 à 01/01/10 il me l'enregistre quand meme ...
    Seulement je ne comprends pas ou je dois mettre ma contrainte check (dep<ret) sur l'attribut dep ou ret sur PowerAMC vu qu'apparement une seule suffit pour vous.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Un petit up svp

    Si quelqu'un peut m'expliquer ou je dois mettre cette foutu contrainte check (dep<ret) parce que franchement je vois pas ... Dans l'onglet identifiant ? Attributs ? Règles ?

    Merci

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Cette question en concerne plus Oracle mais PowerAMC.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

Discussions similaires

  1. Format date timestamp
    Par tidou95220 dans le forum SAS Base
    Réponses: 4
    Dernier message: 04/01/2013, 12h15
  2. Choix du format de date timestamp Mysql ou timestamp Unix
    Par audreyc dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/04/2009, 07h20
  3. [Dates] Format date avec timestamp
    Par otagun dans le forum Langage
    Réponses: 11
    Dernier message: 27/05/2006, 15h16
  4. Format date
    Par cochet dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/03/2004, 08h37
  5. Réponses: 4
    Dernier message: 06/02/2004, 16h23

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