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 :

Remplacer des heures par des tranches d'heures


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Remplacer des heures par des tranches d'heures
    Bonjour, je souhaiterais simplement transformer mes heures en tranches d'heure. Exemple : prendre toutes les valeurs comprises entre 7h45 et 8h et les remplacer par 7h45-8h. J'aimerais bien faire ça avec la fonction Replace mais j'avoue que je bloque là...

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Sous quelle forme ces heures sont-elle enregistrées ? (type de la colonne)
    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.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Je t'avoue que je n'en sais rien, je ne sais pas comment le voir sur sql server.
    Je ne sais pas si ça peut aider je te mets une capture de la colonne en question.
    Nom : heures.JPG
Affichages : 208
Taille : 15,3 Ko

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Ça peut aussi bien être du texte qu'un type Date-Heure. Pour le savoir, il faudrait consulter la structure de la table
    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.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    C'est un varchar...
    Peut-être du côté de la méthode case ?

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    J'ai trouvé cette solution... Ca rallonge le temps d'exécution de la requête mais bon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CASE 
          WHEN CONVERT(DATETIME, MIN([HR_DEB]))<'07:00' THEN 'Avant 7h'
    	  WHEN CONVERT(DATETIME, MIN([HR_DEB]))>='07:00' and CONVERT(DATETIME, MIN([HR_DEB]))<'07:30' THEN 'Entre 7h et 7h30'
          WHEN CONVERT(DATETIME, MIN([HR_DEB]))>='07:30' and CONVERT(DATETIME, MIN([HR_DEB]))<'08:00' THEN 'Entre 7h30 et 8h'
    	  WHEN CONVERT(DATETIME, MIN([HR_DEB]))>='08:00' and CONVERT(DATETIME, MIN([HR_DEB]))<'08:30' THEN 'Entre 8h et 8h30'
    	  WHEN CONVERT(DATETIME, MIN([HR_DEB]))>='08:30' and CONVERT(DATETIME, MIN([HR_DEB]))<'09:00' THEN 'Entre 8h30 et 9h'
    	  WHEN CONVERT(DATETIME, MIN([HR_DEB]))>='09:00' and CONVERT(DATETIME, MIN([HR_DEB]))<'09:30' THEN 'Entre 9h et 9h30'
    	  WHEN CONVERT(DATETIME, MIN([HR_DEB]))>='09:30' and CONVERT(DATETIME, MIN([HR_DEB]))<'10:00' THEN 'Entre 9h30 et 10h'
    	  WHEN CONVERT(DATETIME, MIN([HR_DEB]))>='10:00' and CONVERT(DATETIME, MIN([HR_DEB]))<'10:30' THEN 'Entre 10 et 10h30'
    	  WHEN CONVERT(DATETIME, MIN([HR_DEB]))>='10:30' and CONVERT(DATETIME, MIN([HR_DEB]))<'11:00' THEN 'Entre 10h30 et 11h'
    	  WHEN CONVERT(DATETIME, MIN([HR_DEB]))>='11:00' and CONVERT(DATETIME, MIN([HR_DEB]))<'11:30' THEN 'Entre 11h et 11h30'
    	  WHEN CONVERT(DATETIME, MIN([HR_DEB]))>='11:30' and CONVERT(DATETIME, MIN([HR_DEB]))<'12:00' THEN 'Entre 11h30 et 12h'
          ELSE 'Après 12h'
        END as Tranche_horaire

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Dommage... Tu fais comment des calculs sur un VARCHAR ?
    Toutefois, tout n'est pas perdu ; à la différence d'une date, un heure se trie alphabétiquement et numériquement de la même manière.

    Ce que je te propose c'est d'utiliser une table complémentaire qui listera les différentes tranches. Table de paramètres à créer et remplir une fois pour toutes.
    Pour faire au plus simple, la structure serait :
    tranche CHAR(11)
    debut   CHAR(5)
    fin     CHAR(5)
    Exemple :
    tranche     debut   fin
    07:45-08:00 07:45   07:59
    08:00-08:15 08:00   08:14
    Les puristes diront qu'il y a redondance d'information, qu'à elle seule la colonne début permettrait de définir les valeurs des deux autres colonnes.
    J'en suis conscient et propose ici une mise en œuvre au plus simple


    Il ne reste plus qu'à faire une jointure avec tes données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select  tbl.*
        ,   trc.tranche
    from    matable     AS  tbl
        inner join
            tranches    AS  trc
            on  tbl.premier_debut BETWEEN trc.debut AND trc.fin
    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.

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous pouvez aussi "arrondir" l'heure à la demie-heure prés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    WITH LaTable(Heure) AS (
        SELECT CAST('02:40' AS TIME)
        UNION ALL SELECT '05:44'
        UNION ALL SELECT '08:12'
        UNION ALL SELECT '08:15'
        UNION ALL SELECT '08:30'
        UNION ALL SELECT '08:31'
        UNION ALL SELECT '09:00'
    )
    SELECT Heure, DATEADD(MINUTE, -(DATEDIFF(MINUTE, 0, Heure)%30), Heure) HeureArrondie
    FROM LaTable AS lt

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

Discussions similaires

  1. [XL-2003] Comment multiplier des nombres par des heures
    Par stephank dans le forum Excel
    Réponses: 3
    Dernier message: 22/11/2010, 19h48
  2. Comment remplacer le clavier par des boutons ?
    Par aliwassem dans le forum Langage
    Réponses: 1
    Dernier message: 14/12/2005, 19h00
  3. Réponses: 3
    Dernier message: 07/12/2005, 13h51
  4. Remplacer des boutons par des menus déroulants?
    Par drthodt dans le forum Access
    Réponses: 3
    Dernier message: 20/09/2005, 17h37
  5. Réponses: 5
    Dernier message: 30/05/2005, 16h58

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