Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/02/2011, 14h44   #1
Membre à l'essai
 
Inscription : mars 2005
Messages : 76
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 76
Points : 20
Points : 20
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 :
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 :
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
Tragnee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 17h41   #2
Invité régulier
 
Inscription : octobre 2010
Messages : 17
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 17
Points : 8
Points : 8
Ceci devrait te convenir et marche également avec > < comme tu auras besoin plus tard.

Code :
Convert(Char(5),HeureDebut,108) = '17:30'
NB: http://msdn.microsoft.com/fr-fr/library/ms187928.aspx
Kagukuk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 19h25   #3
Membre à l'essai
 
Inscription : mars 2005
Messages : 76
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 76
Points : 20
Points : 20
Merci, je teste...
Tragnee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 19h47   #4
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
pour éviter la conversion en varchar, tu peux utiliser DATEPART ( http://msdn.microsoft.com/en-us/library/ms174420.aspx )

Code :
1
2
WHERE datepart( hour, HeureDebut ) = 12
	AND datepart( minute, HeureDebut) = 30
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 08h50   #5
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
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...
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 23/02/2011, 15h53   #6
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
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...
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 17h38   #7
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
bonjour

@iberserk et @7gyY9w1ZY6ySRgPeaefZ

on peut trouver un arrangement

Code sql :
1
2
 
WHERE CAST(HeureDebut AS TIME) = '12:30'
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 18h04   #8
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
J'avais testé ça mais j'étais tombé sur une erreur (bug?) :

Code :
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)
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 18h09   #9
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
J'avais testé ça mais j'étais tombé sur une erreur (bug?) :

Code :
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)
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 19h02   #10
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
A 7gyY9w1ZY6ySRgPeaefZ:

Ce n'était pas une attaque cher collègue :-) juste une préconisation pour répondre à une brebis semble t'il égarée.

Je ne connais pas l'avancée de son projet, peut-être sa base à t'elle 10ans... peut-être six mois?
Tout le monde ne connait pas tous les typages...

Si ma remarque peut lui permettre d'utiliser les "bons" typage à l'avenir (s'il à l'occasion de les mettre en oeuvre bien entendu...)...

Je jongle pour ma part actuellement avec une base chez un grand éditeur d'ERP avec un USER TYPE nommé BOOLEAN de type ... varchar(1) (mon préféré)
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 19h03   #11
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Citation:
Envoyé par aieeeuuuuu Voir le message
Ton script ne plante pas chez moi !
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
J'ai trouvé la source du problème: Sql Server Management Studio !!!
J'utilise habituellement la version 2005 et là, ça plante.
Avec SSMS 2008, ça tourne....
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 19h10   #12
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Le TIME est apparu avec SQL SERVER 2008... that's probably why
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 10h26   #13
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
Envoyé par iberserk Voir le message
Le TIME est apparu avec SQL SERVER 2008... that's probably why
oui, ça explique surement l'origine du problème, mais pas le message d'erreur :
Citation:
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.
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h22.


 
 
 
 
Partenaires

Hébergement Web