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 :

select sur une date


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2009
    Messages : 152
    Points : 90
    Points
    90
    Par défaut select sur une date
    Peut 'on en sql réaliser un select avec comme condition:

    exemple:
    select toto from table where la_date='10/02/2009';

    lorsque je fais la requete si dessous cela fonctionne mais pas celle ci dessus.

    select toto from table where la_date >='10/02/2009';

    Merci d'avance...

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Une date Oracle stocke jour, mois, an, heures, minutes et secondes. Pour ne pas prendre en compte les heures, minutes, secondes, utilisez la fonction TRUNC (sinon JJ/MM/AAAA correspond à JJ/MM/AAAA 00:00:00):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select toto from table where trunc(la_date)='10/02/2009';

  3. #3
    Membre averti Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Points : 442
    Points
    442
    Par défaut
    '10/02/2009' est une chaine de caractères, pas une date.
    Il faut convertir cette chaine en date avec TO_DATE :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select toto from table where la_date = TO_DATE('10/02/2009','DD/MM/YYYY');
     
    select toto from table where la_date >= TO_DATE('10/02/2009','DD/MM/YYYY');

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Voilà, il n'y a plus qu'à combiner les deux réponses ci-dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select toto
      from table
     where trunc(la_date) = to_date('10/02/2009', 'dd/mm/yyyy');
    Si vous avez un index sur la_date, il vaut mieux écrire la requête ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select toto
      from table
     where la_date >= to_date('10/02/2009', 'dd/mm/yyyy')
       and la_date <  to_date('11/02/2009', 'dd/mm/yyyy');

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    peux-tu clarifier un peu,parceque les deux requetes fonctionnent

    Citation Envoyé par breizh76 Voir le message
    Peut 'on en sql réaliser un select avec comme condition:

    exemple:
    select toto from table where la_date='10/02/2009';

    lorsque je fais la requete si dessous cela fonctionne mais pas celle ci dessus.

    select toto from table where la_date >='10/02/2009';

    Merci d'avance...

  6. #6
    Inactif  

    Homme Profil pro
    Freelance EURL / Business Intelligence ETL
    Inscrit en
    Avril 2005
    Messages
    5 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance EURL / Business Intelligence ETL
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2005
    Messages : 5 879
    Points : 26 147
    Points
    26 147
    Billets dans le blog
    3
    Par défaut
    Question : il ne faut pas non plus ajouter un format de date quand on invoque la fonction trunc ? Je suppose qu'il va chercher un format de date paramétré par défaut, donc autant s'assurer on proposant le format de date dont on est sûr....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT toto
      FROM TABLE
     WHERE trunc(la_date,'dd/mm/yyyy') = to_date('10/02/2009', 'dd/mm/yyyy');
    - So.... what exactly is preventing us from doing this?
    - Geometry.
    - Just ignore it !!
    ****
    "The longer he lived, the more he realized that nothing was simple and little was true" A clash of Kings, George R. R. Martin.
    ***
    Quand arrivera l'apocalypse, il restera deux types d'entreprise : les pompes funèbres et les cabinets d'audit. - zecreator, 21/05/2019

  7. #7
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2009
    Messages : 152
    Points : 90
    Points
    90
    Par défaut
    ah parfait. C'est parfaitement ce que je voulais.

    Merci pour tout. Comme d'hab \o/

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par Glutinus Voir le message
    Question : il ne faut pas non plus ajouter un format de date quand on invoque la fonction trunc ? Je suppose qu'il va chercher un format de date paramétré par défaut, donc autant s'assurer on proposant le format de date dont on est sûr....
    Le format par défaut de trunc est 'DD', et à ma connaissance n'est pas paramétrable. Mais effectivement ça ne fait pas de mal de le préciser.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Le format par défaut de trunc est 'DD', et à ma connaissance n'est pas paramétrable. Mais effectivement ça ne fait pas de mal de le préciser.
    moi je voudrais supprimer sur une table toute les données qui sont antérieur a Mois-2 (cette table est immense et garde 2 mois historique)
    il y a un index sur la colonne date_integration
    suppression de tout ce qui a - de 2 mois
    cela donne quoi ensuite

    SELECT *
    FROM toto
    WHERE la_date >= to_date('27/01/2010', 'dd/mm/yyyy')
    AND la_date < to_date('01/12/2009', 'dd/mm/yyyy');

    la date invalid identifier ?

    SELECT *
    FROM toto
    WHERE trunc(created_date) = to_date('01-Dec-2009', 'dd-Mon-yyyy');



    merci par avance

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Quelque chose de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM MaTable
    WHERE MaDate < add_months(sysdate, -2)

  11. #11
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    delete ma_table
    where created_date < add_months(sysdate,-2)

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Quelque chose de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM MaTable
    WHERE MaDate < add_months(sysdate, -2)


    merci "ma date" représente la date a partir duquel je veux faire les - 2 mois
    j ai peur que cela renvoi trop de ligne et n' aboutisse pas

    si je veux faire par étape avant en select pour faire de connerie
    selectionne l'année 2008,ensuite 2007, ensuite 2006

    une fois que je vois le nombre de lignes que cela renvoi,
    j aimerai les supprimer par etape
    merci de votre aide je travaille rarement sur le dates

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par glood1 Voir le message
    merci "ma date" représente la date a partir duquel je veux faire les - 2 mois
    j ai peur que cela renvoi trop de ligne et n' aboutisse pas

    si je veux faire par étape avant en select pour faire de connerie
    selectionne l'année 2008,ensuite 2007, ensuite 2006

    une fois que je vois le nombre de lignes que cela renvoi,
    j aimerai les supprimer par etape
    merci de votre aide je travaille rarement sur le dates
    exemple ma colonne a un index et s' appelle date_integration sous forme 20090914 annee/mois/jours
    si je veux sélection toutes les row inférieur au premier decembre 2009
    SELECT * FROM table



    WHERE TRUNC(DATE_XXXXXX) <= TO_DATE('01-Dec-2009','DD-MON-YYYY').

    cela ne marche pas j ai du faire une erreur
    ORA-00919: invalid function


    j ai egalement cette erreur

    select *
    from table
    where trunc(date_XXXXXX) = to_date('01-Dec-2009', 'dd-Mon-yyyy');
    Error: ORA-00932: inconsistent datatypes: expected NUMBER got DATE

  14. #14
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Quelque chose de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM MaTable
    WHERE MaDate < add_months(sysdate, -2)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DELETE FROM MaTable
    WHERE MONTHS_BETWEEN(MaDate,SYSDATE)< -2
    Attention, MONTHS_BETWEEN peut renvoyer un nombre avec des décimales
    MONTHS_BETWEEN :
    Returns the number of months between dates d1 and d2.
    If d1 is later than d2, result is positive; if earlier, than negative.
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  15. #15
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ce serait mieux de créer votre propre sujet pour voter problème, là on "parasite" un sujet déjà résolu.

    Si un modérateur pouvait splitter le sujet éventuellement !


    Pour votre erreur, il faut le script de création de votre table.
    Apparement, c'est du numérique.
    Il faut d'abord traduire votre colonne en chaîne de caractère puis en date (la prochaine fois que vous voulez sotcker des dates, utilisez le bon format) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
      FROM MaTable
     WHERE to_date(to_char(DATE_INTEGRATION), 'yyyymmdd') <= TO_DATE('01-Dec-2009', 'DD-MON-YYYY')
    Si vous ne voulez pas faire de bétise, sauvegardez votre table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Create table MaTable_sav_20100128
    as
    select * from Matable;
    Si vous supprimez énormément de données, comme mnitu le rappelle dans ce sujet, il sera beaucoup plus rapide de créer une table avec les données à conserver plutôt que de faire une grosse suppression.

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Ce serait mieux de créer votre propre sujet pour voter problème, là on "parasite" un sujet déjà résolu.

    Si un modérateur pouvait splitter le sujet éventuellement !

    c 'est pas moi qui est utilisé le mauvais format date
    Pour votre erreur, il faut le script de création de votre table.
    Apparement, c'est du numérique.
    Il faut d'abord traduire votre colonne en chaîne de caractère puis en date (la prochaine fois que vous voulez sotcker des dates, utilisez le bon format) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
      FROM MaTable
     WHERE to_date(to_char(DATE_INTEGRATION), 'yyyymmdd') <= TO_DATE('01-Dec-2009', 'DD-MON-YYYY')

    pour supprimer je remplace le select par delete


    Si vous ne voulez pas faire de bétise, sauvegardez votre table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Create table MaTable_sav_20100128
    as
    select * from Matable;
    Si vous supprimez énormément de données, comme mnitu le rappelle dans ce sujet, il sera beaucoup plus rapide de créer une table avec les données à conserver plutôt que de faire une grosse suppression.
    merci beaucoup a vous cela marche
    impossible de la sauvegarder (cette table a grossi depuis 15 ans )
    peux pas sauvegarder la table c 'est sur une tres tres veille machine une table de 25 go (un dump de la table prendrais 48 heures)

    la solution est peut être de supprimer par année

    si c 'est possible d avoir le même exemple requete entre le premier 01dec2009
    et le 12dec2009

    select *
    from ma table
    WHERE to_date(to_char(DATE_INTEGRATION), 'yyyymmdd') <= TO_DATE('01-Dec-2009', 'DD-MON-YYYY')

    merci

  17. #17
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Gagnez du temps et faites directement une analyse par année :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      select trunc(date_integration/1e4) as annee, count(*) as nb_lignes
        from MaTable 
    group by trunc(date_integration/1e4)
    order by annee desc;

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Gagnez du temps et faites directement une analyse par année :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      select trunc(date_integration/1e4) as annee, count(*) as nb_lignes
        from MaTable 
    group by trunc(date_integration/1e4)
    order by annee desc;
    super merci

    voila le resultat
    2010 3589484
    2009 79453403
    2008 6032937

    il faut que je supprime en 3 ou 4 partie l'annéé 2009
    donc entre 01nov2009 et 01sept2009

    tout ce qui est inférieur a nov 2009 et supérieur a septembre 2009 ?
    je supprime bien 3 mois dans ce cas la


    il me faut une requete du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
      FROM MaTable
     WHERE to_date(to_char(DATE_INTEGRATION), 'yyyymmdd') <= TO_DATE('01-nov-2009', 'DD-MON-YYYY') AND >= TO_DATE('01-sep-2009', 'DD-MON-YYYY')
    11:37:10 Error: ORA-00936: missing expression

  19. #19
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Pourquoi vouloir supprimer "entre", je ne comprends pas.
    Supprimez tout ce qui est inférieur à il y a deux mois, vous avez le choix entre écrire la date en dur ou utiliser les fonctions de dates, les exemples ont été plutôt nombreux.

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Pourquoi vouloir supprimer "entre", je ne comprends pas.
    Supprimez tout ce qui est inférieur à il y a deux mois, vous avez le choix entre écrire la date en dur ou utiliser les fonctions de dates, les exemples ont été plutôt nombreux.
    c 'etais pour que cela prenne moins de temps


    je fais donc un delete ?
    Delete *
    FROM MaTable
    WHERE to_date(to_char(DATE_INTEGRATION), 'yyyymmdd') <= TO_DATE('01-Nov-2009', 'DD-MON-YYYY')

    merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Select case sur une date
    Par tamtam64 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/11/2013, 16h45
  2. Select avec max sur une date
    Par olibara dans le forum Requêtes
    Réponses: 10
    Dernier message: 06/07/2010, 07h18
  3. Problème de lenteur due à une selection sur une date [CR 8.5]
    Par Fredifredo dans le forum SAP Crystal Reports
    Réponses: 15
    Dernier message: 13/02/2007, 17h10
  4. select sur une date de plus de x jour
    Par Zen_Fou dans le forum Requêtes
    Réponses: 4
    Dernier message: 03/04/2006, 17h14
  5. Problème de select sur une date (DATETIME....)
    Par zeldoi5 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/05/2005, 11h19

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