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??
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
-- 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
-- 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: ******************
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
-- 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
-- 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:brouardf@club-internet.fr ******************
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
-- 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
-- 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: ******************
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 ! !
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" <anonymous@discussions.microsoft.com> a écrit dans le message de
news:f38201c3f21c$a30ba000$a301280a@phx.gbl...
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??
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 ! !
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 ! ! >
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" <c.lauliac-nospam@bourse-immobilier.fr> a écrit dans le
message de news:c0inaj$hiq$1@s1.read.news.oleane.net...
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" <anonymous@discussions.microsoft.com> a écrit dans le message de
news:f38201c3f21c$a30ba000$a301280a@phx.gbl...
> 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 ! !
>
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 ! ! >