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 :

Concaténer une variable à une date


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut Concaténer une variable à une date
    Bonsoir à tous,

    Voici mon (petit) problème:

    Je cherche à concaténer une variable à une partie d'une date.
    Admettons que j'ai une variable disons "var_annee" dont la valeur associée est 2012:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var_annee NUMBER(4)
    var_annee := 2012
    J'aimerais écrire une condition (pour ma requête/procédure) de sorte à sélectionner dans ma base que les dates comprises entre 01/01/var_annee et 30/06/var_annee, donc grosso modo quelque chose de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT .... FROM .... WHERE d_date BETWEEN "01/01/var_annee" AND "30/06/var_annee"
    Pourquoi faire une telle chose et ne pas écrire directement la date en entière ? Et bien... parce que ma variable var_annee sera passée en paramètre.

    Donc ma question est comment concaténer la variable var_annee au début de la date "01/01/" et "30/06/"

    Merci d'avance pour vos réponses.
    Liz

  2. #2
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    Pourquoi faire une telle chose et ne pas écrire directement la date en entière ?
    Oui pourquoi; alors qu'il existe une fonction qui permet d'extraire l'année d'une date pour faire ce genre de requête... voir EXTRACT(YEAR FROM ...)

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 134
    Par défaut
    En SQL, l'opérateur de concaténation est ||
    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.

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut
    Je ne cherche pas à extraire une année d'une date, mais à faire une certaine sélection dans ma table (qui possède un champ date). Concrètement, je voudrais extraire les données de ma table dont les dates sont comprises entre deux dates (par exemple 01/01/2012 et 01/06/2012) dont l'année sera passer en paramètre par l'utilisateur.

    Autrement dit si je donne en paramètre '2011' à ma procédure, celle ci doit me renvoyer les données (de la table en question) dont les dates sont comprises entre le 01/01/2011 et 01/06/2011.

    Merci d'avance pour vos réponses.
    Liz

  5. #5
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Il te proposait de faire deux conditions à la place de la concaténation :
    - une sur les jour/mois
    - une sur les années

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 134
    Par défaut
    Quelque chose comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE d_date BETWEEN CAST('01/01/' || var_annee AS DATE FORMAT 'DD/MM/YYYY')
            AND CAST('30/06/' || var_annee AS DATE FORMAT 'DD/MM/YYYY')
    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.

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut
    Oui quelque chose comme ca effectivement
    En fait, j'avais déja essayé de faire quelque chose de ce style, mais j'ai eu une erreur (expecting INTO).

    j'ai essayé ceci :

    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
     
    create or replace procedure p_test as
     
    annee_N number(4);
    annee_N_1 number(4);
     
    BEGIN
        annee_N := 2012;
        annee_N_1 := annee_N - 1;
     
        SELECT dat_start 
            FROM Ma_table
                WHERE d_date BETWEEN CAST('31/08/' || annee_N_1 AS DATE FORMAT 'DD/MM/YYYY')
                     AND CAST('30/08/' || annee_N AS DATE FORMAT 'DD/MM/YYYY')
    END;
    /
    Mais j'ai toujours la même erreur => 'expecting INTO'

    Ici, je n'ai pas encore mis l'année en paramètre (en l'occurrence 'annee_N'), c'est juste pour tester si le select me renvoie bien des valeurs.

    PS: J'utilise TOAD

    Merci encore pour vos réponses
    Liz

  8. #8
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    a priori, l'erreur n'a rien à voir avec la clause WHERE.

    Quel est le SGBD ? FIREBIRD ?

    si oui il faut affecter les résultats de la requête à une/des variables de sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    FOR 
      SELECT dat_start 
            FROM Ma_table
                WHERE d_date BETWEEN CAST('31/08/' || anneeN_1 AS DATE FORMAT 'DD/MM/YYYY')
                     AND CAST('30/08/' || annee_N AS DATE FORMAT 'DD/MM/YYYY')
    INTO
       :Res_Sortie

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut
    J'utilise Oracle...
    Par contre, s'il faut affecter les résultats de la requête à une/des variables de sortie, je présume que ces variables devront êtres déclarées, donc ma question est : comment les déclarer (niveau tailles) ? Si j'ai par exemple plus d'un million de ligne retournée (dans l'absurde)

  10. #10
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    Je ne connais pas ORACLE, mais je suppose qu'en regardant les tutoriaux ou dans la FAQ sur les PSQL, tu devrais trouver ton bonheur

  11. #11
    Membre actif
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Par défaut
    to_char(var_annee,'yyyy')||'99/99/9999'

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    Quelque chose comme çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE OR REPLACE procedure p_test(p_annee_N in number, c out sys_refcursor) AS
      l_annee_N_1 number(4);
    BEGIN
      l_annee_N_1 := p_annee_N - 1;
      open c for SELECT dat_start 
                   FROM Ma_table
                  WHERE d_date BETWEEN to_date('31/08/' || to_char(l_annee_N_1), 'DD/MM/YYYY')
                                   AND to_date('30/08/' || to_char(p_annee_N), 'DD/MM/YYYY');
    END;
    /

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

Discussions similaires

  1. Concaténer nom d'une variable
    Par diego45 dans le forum MATLAB
    Réponses: 19
    Dernier message: 24/09/2014, 15h29
  2. Copier une variable à une autre date
    Par wsquare dans le forum SAS Base
    Réponses: 1
    Dernier message: 14/01/2014, 14h50
  3. Concaténer un compteur à une variable
    Par L'aigle de Carthage dans le forum Langage
    Réponses: 8
    Dernier message: 08/05/2008, 16h28
  4. Requête selection avec une variable de date
    Par kahmsin dans le forum Access
    Réponses: 7
    Dernier message: 20/11/2005, 19h38
  5. Réponses: 10
    Dernier message: 19/02/2004, 12h58

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