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

Langage SQL Discussion :

[Debutant] GROUP BY sur les premiers caracteres d'un champ


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 14
    Points : 13
    Points
    13
    Par défaut [Debutant] GROUP BY sur les premiers caracteres d'un champ
    Bonjour,

    J'aimerais faire un SELECT avec un GROUP BY sur les premiers caractères d'un champ mais je ne sais pas si c'est possible avec mySQL...

    J'ai un champ date qui contient des date au format "année-mois-jour heure:minute:seconde" par exemple : 2004-11-05 10:00:15

    pour la requete que je souhaite faire je n'ai pas besoin des heures et je veux juste faire un GROUP BY sur "année-mois-jour". Une solution ? Merci

  2. #2
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    salut,

    as-tu fait un recherche sur le forum ? sais-tu qu'il existe aussi une section reservé à mysql où tu aurais trouvé l'utilisation de l'instruction Like dans une requête ?

  3. #3
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Petogaz
    salut,
    as-tu fait un recherche sur le forum ? sais-tu qu'il existe aussi une section reservé à mysql où tu aurais trouvé l'utilisation de l'instruction Like dans une requête ?
    LIKE est une fonction commune à tous les SGBD utilisant la norme SQL
    => La demande de seb-astien est dans ce cas parfaitement générique.

    Si le besoin est relatif a une date précise la fonction LIKE n'est d'ailleur pas appropriée

    Le format ne semble pas etre celui d'une DATE qui ne comporte pas de notion de TIME.

    Donc s'il sagit d'une recherche par rapport a une date donnée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select 
              count( * )
    from
              Matable
    where
              DATE( Date_Time ) = :Une_Date
    S'il s'agit d'un comptage par DATE.
    2 Cas
    - Ta version de MYSQL supporte les sous requetes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select
              a.Une_Date , count( * )
    from
         ( select
                     DATE( Date_Time ) Une_Date
           from
                     Matable
         ) AS a
    group by
             a.Une_Date
    - ta version ne les supportes pas et je ne penses pas que tu puisse le faire en une seule requete

    =>
    1 > Curseur sur les distinct DATE( date_time )
    2 > Utilisation de la premiere requete

    NB : Si ton type de donné n'est pas dans le spectre DATE / TIMESTAMP
    utilise SUBSTR( Date_Time , 1 , 10 ) à la place de DATE( Date_Time )

  4. #4
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    Citation Envoyé par papounet
    LIKE est une fonction commune à tous les SGBD utilisant la norme SQL
    => La demande de seb-astien est dans ce cas parfaitement générique
    je n'ai jamais dit que l'instruction LIKE est spécifique au MYSQL. il faut comprendre le sens de ma phrase. je l'utilise personnellement dans pas mal de SGBD. parcontre c'est une instruction dont l'utilisation est expliqué dans la section MYSQL. c'était juste pour orienter notre ami.

    Si le besoin est relatif a une date précise la fonction LIKE n'est d'ailleur pas appropriée
    eh bien autant pour moi. MYSQL n'est pas le SGBD que j'utilise. je laisse ceci au pro du mysql.

  5. #5
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    Citation Envoyé par papounet
    LIKE est une fonction commune à tous les SGBD utilisant la norme SQL
    => La demande de seb-astien est dans ce cas parfaitement générique
    je n'ai jamais dit que l'instruction LIKE est spécifique au MYSQL. il faut comprendre le sens de ma phrase. je l'utilise personnellement dans pas mal de SGBD. parcontre c'est une instruction dont l'utilisation est expliqué dans la section MYSQL. c'était juste pour orienter notre ami.

    Si le besoin est relatif a une date précise la fonction LIKE n'est d'ailleur pas appropriée
    eh bien autant pour moi. MYSQL n'est pas le SGBD que j'utilise. je laisse ceci au pro du mysql.

  6. #6
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Sous MySql je ne connais pas les fonctions sur les formats de date mais pourquoi ne pas faire la requête plutôt sous la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT to_char(col_date,'YYYY-MM-DD'),...
    FROM ta_table
    WHERE ...
    GROUP BY to_char(col_date,'YYYY-MM-DD');
    Tu fais donc tes regroupements sur ta date qui est bien mise au format sur juste année-mois-jour, sans passer par des sous requêtes.

    La fonction to_char fonctionne sous Oracle, il doit bien y avoir l'équivalent sous MySql

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 571
    Points
    52 571
    Billets dans le blog
    5
    Par défaut
    TO_CHAR n'existe pas en SQL, c'est une fonction propre à Oracle !

    Il est navrant de constater à quel point certains interlocuteurs plutôt que de répondre à une question passent leur temps a tirer la couverture vers le produit qui les fait bander !

    Pour répondre à ce problème, ce n'est pas en tranformant la date en littéral qu'il faut procéder, mais en extrayant de la dateheure les élements nécessaire.

    Par exemple convertir ta dateheure ne date simple.
    Dans ce cas du point de vue du langage SQL, c'est :
    CAST(MaDateHeure AS DATE)

    Sinon, MySQL intègre une fonction d'extraction de la date à partir d'une dateheure :
    DATE(expr)
    Extracts the date part of the date or datetime expression expr.

    mysql> SELECT DATE('2003-12-31 01:02:03');
    -> '2003-12-31'

    DATE() is available as of MySQL 4.1.1.
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 54
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par nantais
    Sous MySql je ne connais pas les fonctions sur les formats de date mais pourquoi ne pas faire la requête plutôt sous la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT to_char(col_date,'YYYY-MM-DD'),...
    FROM ta_table
    WHERE ...
    GROUP BY to_char(col_date,'YYYY-MM-DD');
    Le GROUP BY Fonction( X ) fonctionne sous Oracle, mais d'autres SGBD ne l'accepte pas, raison pour laquelle je n'avais pas proposé la solution.
    Si Mysql l'accepte un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT 
               DATE(col_date)
    FROM 
               ta_table
    GROUP BY 
               DATE(col_date)
    Serait plus correcte

  9. #9
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Citation Envoyé par SQLpro
    TO_CHAR n'existe pas en SQL, c'est une fonction propre à Oracle !

    Il est navrant de constater à quel point certains interlocuteurs plutôt que de répondre à une question passent leur temps a tirer la couverture vers le produit qui les fait bander !
    Je n'ai jamais prétendu que to_char faisait partie de la norme SQL, je parlais bien d'Oracle.

    Quant à ta manière de réagir, je vois bien que toi il n'y a qu'une chose qui te fasse bander c'est ta petite personne.

    Un retour en maternelle où on apprend le B-A-BA de la politesse te ferait le plus grand bien!

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

Discussions similaires

  1. [AC-2007] Condition en Si sur les premiers caractères d'un champ
    Par btks59 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/03/2011, 12h03
  2. Réponses: 1
    Dernier message: 16/09/2009, 13h30
  3. debutant cherche reponse sur les caracteres speciaux
    Par Alexlesilex dans le forum Débuter
    Réponses: 3
    Dernier message: 11/05/2006, 15h26
  4. faire un group by sur les différents niveau de code
    Par speed034 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/10/2004, 16h10
  5. [debutant STL] question sur les vectors
    Par killerjeff dans le forum SL & STL
    Réponses: 13
    Dernier message: 19/08/2004, 17h32

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