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 :

Manipuler les dates


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Par défaut Manipuler les dates
    Bonjour

    j'ai une requête sql de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT 
        ... 
    FROM
        ...
    WHERE
        substr(dates, 0, 8) = to_char(sysdate, 'yyyymmdd')
    je compare donc deux chaînes de caractères pour une date.

    Je voudrais maintenant mettre la clause sur une période donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    substr(dates, 0, 8) BETWEEN '20150101' AND '20160101'
    mais je ne pense pas que ça soit la bonne manière de faire pour les dates. Faut-il faire une conversion ?

    Merci.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Le pluriel au nom de la colonne signifie t-il qu'il y a plusieurs dates ou une date et autre chose dans la colonne pour chaque ligne de la table et que c'est pour ça que vous prenez les 8 premiers caractères ?
    Votre colonne n'est-elle pas de type DATE ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 602
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par CliffeCSTL Voir le message
    Bonjour

    Je voudrais maintenant mettre la clause sur une période donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    substr(dates, 0, 8) BETWEEN '20150101' AND '20160101'
    mais je ne pense pas que ça soit la bonne manière de faire pour les dates. Faut-il faire une conversion ?

    Merci.
    ATTENTION : cet ajout rendra la requete non sargable. Si la table est volumineuse, les temps de traitement vont être rédhibitoires !
    Si la colonne est de format date, il est inutile de passer par une conversion de format pour filtrer des plages de dates

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Par défaut
    J'aurai du préciser, mais la colonne n'est pas de type date, sinon je n'aurai pas ce problème.
    Je récupère les 8 premiers caractères de la chaîne : YYYYMMDDHHMM

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Voir avec TO_DATE(dates, 'YYYYMMDDHHMI')
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Le format de la date que vous utilisez est triable, vous pouvez éviter la conversion.

    À votre place, j'éviterai également de faire une sous-chaîne et procéderai ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     WHERE dates >= '201501010000'
       AND dates <  '201601010000'

Discussions similaires

  1. Java - manipuler les dates
    Par dompty dans le forum Général Java
    Réponses: 7
    Dernier message: 27/04/2011, 14h13
  2. Manipuler les dates et les mois
    Par Imageek dans le forum SQL
    Réponses: 3
    Dernier message: 11/05/2010, 14h01
  3. comment manipuler les dates et les mois
    Par Imageek dans le forum SQL
    Réponses: 2
    Dernier message: 14/04/2010, 16h18
  4. manipuler les dates dans une requete
    Par lenissart dans le forum MySQL
    Réponses: 3
    Dernier message: 28/01/2009, 17h09
  5. Manipuler les dates en Pascal
    Par annoussa dans le forum Pascal
    Réponses: 1
    Dernier message: 07/05/2007, 23h01

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