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

Développement SQL Server Discussion :

Extraire l'heure d'une date dans une requête


Sujet :

Développement SQL Server

  1. #1
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut Extraire l'heure d'une date dans une requête
    Bonjour tout le monde

    Je suis un peu ébahi par le résulta de mes recherches. Je viens de relire toute la MSDN concernant les dates et heures et je en trouve pas le moyen d'extraire l'heure ou les minutes d'une date complète dans une requete.

    Je trouve bizarre de ne pas avoir de fonction tel que DAY(ladate) qui remonte les heurs ou les minutes.

    Même mon ami Google ne me remonte rien, comme si les fonctions n'éxistaient pas ! ! !

    Vous avez une idée ?

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Vous pouvez utiliser DATEPART :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select getdate() as jour_complet,
           DATEPART(hh, getdate()) as heure, 
           DATEPART(mi, getdate()) as minutes,
           DATEPART(ss, getdate()) as secondes;
     
    jour_complet            heure       minutes     secondes
    ----------------------- ----------- ----------- -----------
    2010-01-27 16:41:00.177 16          41          0

  3. #3
    Invité
    Invité(e)
    Par défaut
    tu as aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select convert(varchar, getdate(), 108 )
    mais tu te retrouves avec une variable en varchar...

  4. #4
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci pour votre aide, cela m'a été fort utile.

    @Jerome_Mtl : bizarremtn lorsque j'ai fait ça hier, ça me donnait la date et pas l'heure ! ! ! Mais ce matin, ça marche, dcidment, l'infotmatique àce côté magique qui est vraiment "plaisant"

    @Waldar : avec le DATEPART, ça marche bien, enfin presque. Mes minute sorte avec un seul chifre lorsque n'ont qu'un seul cihffre. A part une manipulation du VARCHAR et d'un LEFT bien placé, y a pas un moeyn de lui scotcher un zéro devant.

    Remarque, j'ai le même problème avec les mois sur l'utilisation du MONTH

    Faut savoir aussi que je suis obligé de passer par un CAST avant car ma date complète est stockée au format VARCHAR sans la table.

    Un peu de code pour illustrer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'Le '  + CAST(DAY(CAST(DM1.Valeur_Info AS DATETIME)) AS VARCHAR(3)) + '/' +
    CAST(MONTH(CAST(DM1.Valeur_Info AS DATETIME))  AS VARCHAR(3)) + '/' +
    CAST(YEAR(CAST(DM1.Valeur_Info AS DATETIME))  AS VARCHAR(4)) + ' à ' + 
    CAST(DATEPART(hh, CAST(DM1.Valeur_Info AS DATETIME)) AS VARCHAR(2)) + ' H ' +
    CAST(DATEPART(mi, CAST(DM1.Valeur_Info AS DATETIME)) AS VARCHAR(2)) AS DateSortie,
    DM1.Valeur_Info contient la date comme ça :
    29/01/2010 11:0:00
    le but est d'obtenir une chaine qui ferait :
    Le 29/01/2010 à 11 H 00
    Et le nec plus ultra cerati d'avoir le mois en lettre
    Le 29 Janvier 2010 à 11 H 00
    Mais là, je trouve pas le moyen.

    Merci pour votre aide.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 386
    Points
    18 386
    Par défaut
    29/01/2010 11:0:00
    Vous voullez dire :
    ?

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Il faut le faire avec une succession de conversions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    With SR (dt) as
    (
    select convert(datetime, '29/01/2010 11:00:00', 103)
    )
    select 'Le ' + right('00' + DATENAME(dd, dt), 2) +
           ' ' + DATENAME(Month, dt) +
           ' ' + DATENAME(yyyy, dt) +
           ' à ' + DATENAME(hour, dt) +
           ' H ' + right('00' + DATENAME(minute, dt), 2) as res
      from SR;
     
    res
    ------------------------------------
    Le 29 January 2010 à 11 H 00
    C'est quand même la misère ces formats de date dans SQL Server...
    La même chose en Oracle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    With SR AS
    (
    select to_date('29/01/2010 11:00:00', 'dd/mm/yyyy hh24:mi:ss') as dt from dual
    )
    select to_char(dt, '"Le "dd Month yyyy "à" hh24" H "mi') as res
      from SR;
     
    RES                           
    ------------------------------
    Le 29 Janvier   2010 à 11 H 00
    Une fonction, un format paramétrable à volonté !

  7. #7
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci pour ton aide.

    Non, non, je ne me suis pas trompé, c'est bien
    29/01/2010 11:0:00
    Dans mon module de saisie les minutes arrive sur un seul chiffre.

    J'ai essayé ton bout de code, c'est super, c'est exactement ça qu'il me faut.
    Maintenant, je n'arrive pas l'intégrer à ma requête globale. Je ne sais pas me servir du WITH.

    Pourrais tu me faire un exemple d'intégration sur une base de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT Organisateur, DateSortie, Libelle FROM la table
    En remplaçant juste "DateSortie ?

    Merci beaucoup.

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Le with c'était juste pour encapsuler l'exemple, on s'en fiche au final.
    Ca donnerait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT Organisateur, 'Le ' + RIGHT('00' + DATENAME(dd, convert(datetime, DateSortie, 103)), 2) +
           ' ' + DATENAME(Month, convert(datetime, DateSortie, 103)) +
           ' ' + DATENAME(yyyy, convert(datetime, DateSortie, 103)) +
           ' à ' + DATENAME(hour, convert(datetime, DateSortie, 103)) +
           ' H ' + RIGHT('00' + DATENAME(minute, convert(datetime, DateSortie, 103)), 2) AS DateSortie,
           Libelle 
      FROM MaTable;

  9. #9
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci, c'est génial, vraiment trés cool.

    Bon, on y est presque, mais là, je pense que le souci va être coton. J'aivas eu ce genre d eproblème a traité et ici même on m'avais donné la solutoin. Je croyais qu'elle réglait tout les problèmes, mais non, pas celui là.

    Alors j'explique : mon brave hébergeur gentil mignon, n'a rien trouvé de mieux que d'installer son serveur SQL en anglais ! Une obligation de l'outil de gestion des sites, me dit il.

    Bref, avec le bouto de code que tu viens de me file (encore merci) ça marche super bien, exactement ce dont j'avais besoins, sauf que il me dit "January" et pas "Janvier" !

    Pourtant au début de ma Proc Stock j'ai mis
    Je croyais que ça suffisait pour lui faire comprendre qu'on était en français, mais visiblement non, c'est juste la spécification de l'ordre des éléments de la date.
    Et là, je ne sais pas quoi faire parce que je ne comprends rien à ce que dis la MSDN sur le sujet.

    Aurais tu une idée ?

    Merci davance.

    PS : faut vraiment que je trouve une tuto sur le With, parce que ça à l'air bien, quand on le maitrise.

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Tout simplement :
    Pour le WITH, voyez le cours de SQLPro :
    http://sqlpro.developpez.com/cours/s...cursives/#LIII

  11. #11
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Ah ben ouai, je suis passé à côté ! !

    J'irai voir le tuto, merci beaucoup pour tout et bonne continuation.

  12. #12
    Membre chevronné

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    D'un autre coté, comme il est souvent répèté sur ce forum, gérez le coté esthétique dans votre application.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Au lieu de réinventer la roue, Regarde aussi les différents styles disponibles pour le convert ( F1 )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT convert(varchar, getdate(), 113 ),convert(varchar, getdate(), 13 )

  14. #14
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Citation Envoyé par Jerome_Mtl Voir le message
    Au lieu de réinventer la roue, Regarde aussi les différents styles disponibles pour le convert ( F1 )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT convert(varchar, getdate(), 113 ),convert(varchar, getdate(), 13 )
    Ben justement, je ne pense avoir réinventé la roue. Ce que tu donne comme code fais cela :
    29 janv 2010 09:33:45:807
    Et moi je voulais cela :
    Le 29 Janvier 2010 à 09 H 33
    Je trouve qu'il y a pas mal de différence.

    Citation Envoyé par Ptit_Dje Voir le message
    D'un autre coté, comme il est souvent répèté sur ce forum, gérez le coté esthétique dans votre application.
    Oui, je sais bien ça, mais aprfois on prends une orientation et d'autre fois, on a une contrainte plus loin dans le développement.
    Au maximum j'essaie de faire en sorte que ce qui vient de la BDD soit de la donnée brute, voire à peine calculée. Mais sur ce coup là, j'ai une contrainte de programmation que je corrigerais dans la V2 de mon module, doublée d'un contriante de temps : je suis nu poil pressé pour al mise ne ligne, donc j'avoue faire une peu de rustine pour sortir le site dare dare.

    Aprés, une fois la pression redecendue, je remettrais le travail sur le métier je ferais du plus "standard".

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

Discussions similaires

  1. [MySQL] insérer une date dans une table dans un format compréhensible
    Par laurentSc dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 16/08/2014, 11h10
  2. insérer une date dans une table dans un format compréhensible
    Par laurentSc dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/08/2014, 16h31
  3. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. Inserer une date d'une table dans une autre table
    Par petitetre dans le forum Langage SQL
    Réponses: 8
    Dernier message: 18/04/2007, 20h16

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