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 :

Heures sous SQL Server


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 76
    Par défaut Heures sous SQL Server
    Bonjour à tous,

    Sous SQL Server Express 2008, j'ai une table contenant un champ datetime ne contenant que des heures.

    Voici un exemple de valeurs - Nom du champ HeureDebut :

    1899-12-30 12:00:00.000
    1899-12-30 14:00:00.000
    1899-12-30 15:30:00.000

    Ensuite, via une requête, je cherche les records dont le champ HeureDebut équivaut à 12:30

    Critère du WHERE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HeureDebut like '%12:00%'
    ==> il me renvoie le bon record.

    Ensuite, via une requête, je cherche les records dont le champ HeureDebut équivaut à 15:30

    Critère du WHERE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HeureDebut like '%15:30%'
    ==> il ne me renvoie aucun record.

    Comment faire pour résoudre ce problème ??

    De plus, par la suite, je vais devoir faire des comparaisons HeureDebut > 15h30...

    Merci pour votre aide,
    Michael

  2. #2
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 65
    Par défaut
    Ceci devrait te convenir et marche également avec > < comme tu auras besoin plus tard.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Convert(Char(5),HeureDebut,108) = '17:30'
    NB: http://msdn.microsoft.com/fr-fr/library/ms187928.aspx

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 76
    Par défaut
    Merci, je teste...

  4. #4
    Invité
    Invité(e)
    Par défaut
    pour éviter la conversion en varchar, tu peux utiliser DATEPART ( http://msdn.microsoft.com/en-us/library/ms174420.aspx )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    where datepart( hour, HeureDebut ) = 12
    	and datepart( minute, HeureDebut) = 30

  5. #5
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Bonjour,
    Vous avez le type time, pourquoi stocker une "fausse" date dans un datetime si seuls les heures vous intéresse?


    Remplacer votre datetime par un time vous éviterez ainsi l'appel à des fonctions d'extraction de date...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Bonjour,
    Vous avez le type time, pourquoi stocker une "fausse" date dans un datetime si seuls les heures vous intéresse?
    Remplacer votre datetime par un time vous éviterez ainsi l'appel à des fonctions d'extraction de date...
    Dans un monde parfait, on utiliserait les types cohérents !
    Pas plus tard que ce matin, j'ai du fouillé dans une bd et je me suis "amuser" avec des heures stockées en varchar(5)...
    Et pourtant je connais les autres types !!!
    Et je me vois mal justifier 2 semaines de développement pour modifier ce type de données sur une application qui tourne depuis 10 ans...
    Dernière modification par Invité ; 23/02/2011 à 16h09.

  7. #7
    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
    Par défaut
    bonjour

    @iberserk et @7gyY9w1ZY6ySRgPeaefZ

    on peut trouver un arrangement

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE CAST(HeureDebut AS TIME) = '12:30'

  8. #8
    Invité
    Invité(e)
    Par défaut
    J'avais testé ça mais j'étais tombé sur une erreur (bug?) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /*------------------------
    declare @T datetime
    declare @heure time
    set @T = getdate()
    set @heure = cast(@t as time )
    print @T 
    print @heure
    select cast(@t as time )
    ------------------------*/
    Feb 23 2011 12:02PM
    12:02:39.3100000
     
    ------------
    An error occurred while executing batch. Error message is: Invalid attempt to GetBytes on column ''.  The GetBytes function can only be used on columns of type Text, NText, or Image.
    le select cast(@t as time ) plante alors que le set @heure = cast(@t as time ) passe...

    Base de données :Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)

  9. #9
    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
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    J'avais testé ça mais j'étais tombé sur une erreur (bug?) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /*------------------------
    declare @T datetime
    declare @heure time
    set @T = getdate()
    set @heure = cast(@t as time )
    print @T 
    print @heure
    select cast(@t as time )
    ------------------------*/
    Feb 23 2011 12:02PM
    12:02:39.3100000
     
    ------------
    An error occurred while executing batch. Error message is: Invalid attempt to GetBytes on column ''.  The GetBytes function can only be used on columns of type Text, NText, or Image.
    le select cast(@t as time ) plante alors que le set @heure = cast(@t as time ) passe...

    Base de données :Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
    Ton script ne plante pas chez moi !
    Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)

Discussions similaires

  1. Equivalent de rownum sous SQL server
    Par Isildur dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 27/07/2009, 15h48
  2. Pb avec DROP COLUMN sous SQL Server 2000
    Par debailleul dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/03/2004, 14h38
  3. Heure sous SQL SERVER
    Par kisscoolfresh dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 30/01/2004, 17h43
  4. Convertir un type de donnée sous SQL Server
    Par Fleep dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/08/2003, 15h15
  5. MAJ d'une table sous SQL Server par insertion
    Par keish dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/06/2003, 16h23

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