OVH Cloud OVH Cloud

URGENT: DATE ET HEURES

3 réponses
Avatar
HUB
bonjour,
j'ai un petit souci avec l'insertion d'heures dans ma base!
mon champ a un format datetime et j'insere une heure au
format 00:00
mais lors de l'insertion il me transforme tout cela en
01/01/1900 00:00.00
Moi je veux dans ma table le format 00:00 car je doit
faire des somme de heures! je peux obtenir ce format mais
en VARCHAR mais la plus de somme possible!!!!
Quel est la formule pour le champ ou la fonction de
conversion??

MERCI D'AVANCE ! !

3 réponses

Avatar
Fred BROUARD
il n'existe pas de type TIME uniquement dans SQL Server.

Il faut soit tenir compte de la date mais convertie en float (la date
zéro étant le 1/1/1900 dans SQL Server)
Soit utiliser directement untype int (en seconde par exemple) ou float.

Je te donne deux fonction que j'utilise pour convertir des heures
décimales en HMS et vice vera...

A +

/****************************************************************************/
-- conversion d'heure décimale en heure minute seconde littérale
/****************************************************************************/
CREATE FUNCTION FN_CONVERT_HD_HMS (@HD FLOAT)
RETURNS VARCHAR(8)
AS

BEGIN

DECLARE @H INTEGER
DECLARE @M INTEGER
DECLARE @S INTEGER
DECLARE @RETVAL VARCHAR(8)

-- cas trivial
IF @HD IS NULL
RETURN NULL

-- récupération des heures, minutes, secondes
SET @H = FLOOR(@HD)
SET @HD = @HD - @H
SET @HD = @HD * 60
SET @M = FLOOR(@HD)
SET @HD = @HD - @M
SET @HD = @HD * 60
SET @S = FLOOR(@HD)

IF @H < 10
SET @RETVAL = '0'+CAST(@H AS CHAR(1))+':'
ELSE
SET @RETVAL = CAST(@H AS CHAR(2))+':'
IF @M < 10
SET @RETVAL = @RETVAL + '0' + CAST(@M AS CHAR(1))+':'
ELSE
SET @RETVAL = @RETVAL + CAST(@M AS CHAR(2))+':'
IF @S < 10
SET @RETVAL = @RETVAL + '0' + CAST(@S AS CHAR(1))
ELSE
SET @RETVAL = @RETVAL + CAST(@S AS CHAR(2))+':'

RETURN @RETVAL

END
GO

/****************************************************************************/
-- conversion d'heure minute seconde littérale en heure décimale
/****************************************************************************/
CREATE FUNCTION FN_CONVERT_HMS_HD (@HMS CHAR(8))
RETURNS FLOAT
AS

BEGIN

DECLARE @H FLOAT
DECLARE @M FLOAT
DECLARE @S FLOAT
DECLARE @RETVAL FLOAT

-- cas trivial
IF @HMS IS NULL
RETURN NULL

-- voir si saisie erronée (pas de chiffres)
SET @HMS = REPLACE(@HMS, ':', '')
IF LEN(@HMS) <> 6
RETURN NULL

DECLARE @I INTEGER
SET @I = 1
WHILE @I < 7
BEGIN
IF SUBSTRING(@HMS, @I, 1) NOT BETWEEN '0' AND '9'
RETURN NULL
SET @I = @I + 1
END

-- la saisie est correcte
SET @H = CAST(SUBSTRING(@HMS, 1, 2) AS FLOAT)
SET @M = CAST(SUBSTRING(@HMS, 3, 2) AS FLOAT) / 60.0
SET @S = CAST(SUBSTRING(@HMS, 5, 2) AS FLOAT) / 3600.0
SET @RETVAL = @H + @M + @S

RETURN @RETVAL

END
GO

HUB a écrit:
bonjour,
j'ai un petit souci avec l'insertion d'heures dans ma base!
mon champ a un format datetime et j'insere une heure au
format 00:00
mais lors de l'insertion il me transforme tout cela en
01/01/1900 00:00.00
Moi je veux dans ma table le format 00:00 car je doit
faire des somme de heures! je peux obtenir ce format mais
en VARCHAR mais la plus de somme possible!!!!
Quel est la formule pour le champ ou la fonction de
conversion??

MERCI D'AVANCE ! !



--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
TopBidouille
Bonjour,
si tu trouves la solution, je veux bien etre au courant, j'ai le meme
soucis, sauf que SQL ne veut meme pas aller voir du coté du nas. Il
fonctionne parfaitement sur une autre machine réseau prise au hasard...
Merci
Christophe
"HUB" a écrit dans le message de
news:f38201c3f21c$a30ba000$
bonjour,
j'ai un petit souci avec l'insertion d'heures dans ma base!
mon champ a un format datetime et j'insere une heure au
format 00:00
mais lors de l'insertion il me transforme tout cela en
01/01/1900 00:00.00
Moi je veux dans ma table le format 00:00 car je doit
faire des somme de heures! je peux obtenir ce format mais
en VARCHAR mais la plus de somme possible!!!!
Quel est la formule pour le champ ou la fonction de
conversion??

MERCI D'AVANCE ! !



Avatar
news.microsoft.com
C'est simple : ce n'est pas possible. Il existe deux types de données
date/heure sur sql server :
datetime (va jusqu'au centième de seconde)
smalldatetime (s'arrête à la minute)

Evidemment le stockage d'une heure seule est donc impossible. Pour cela, je
ne vois que deux champs, un pour l'heure et un pour la minute...

"TopBidouille" a écrit dans le
message de news:c0inaj$hiq$
Bonjour,
si tu trouves la solution, je veux bien etre au courant, j'ai le meme
soucis, sauf que SQL ne veut meme pas aller voir du coté du nas. Il
fonctionne parfaitement sur une autre machine réseau prise au hasard...
Merci
Christophe
"HUB" a écrit dans le message de
news:f38201c3f21c$a30ba000$
> bonjour,
> j'ai un petit souci avec l'insertion d'heures dans ma base!
> mon champ a un format datetime et j'insere une heure au
> format 00:00
> mais lors de l'insertion il me transforme tout cela en
> 01/01/1900 00:00.00
> Moi je veux dans ma table le format 00:00 car je doit
> faire des somme de heures! je peux obtenir ce format mais
> en VARCHAR mais la plus de somme possible!!!!
> Quel est la formule pour le champ ou la fonction de
> conversion??
>
> MERCI D'AVANCE ! !
>