OVH Cloud OVH Cloud

récup d'heure

4 réponses
Avatar
jeorme
Bonjour,

J'ai un champ de type datetime dans lequel je veux insérer

01/01/1900 17:32:33

J'ai pas de problème ave la date si je mets '01/01/1900' mais les heures
sont toujours 00:00:00, y a t'il une fonction du type getdate() mais qui
prenne que l'heure ?

Merci

4 réponses

Avatar
Fred BROUARD
CURRENT_TIMESTAMP fonction normative SQL !

A +

jeorme a écrit:
Bonjour,

J'ai un champ de type datetime dans lequel je veux insérer

01/01/1900 17:32:33

J'ai pas de problème ave la date si je mets '01/01/1900' mais les heures
sont toujours 00:00:00, y a t'il une fonction du type getdate() mais qui
prenne que l'heure ?

Merci





--
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
jeorme
Merci

Mais mon problème et que veux récupérer simplement l'heure


"Fred BROUARD" a écrit dans le message news:

CURRENT_TIMESTAMP fonction normative SQL !

A +

jeorme a écrit:
> Bonjour,
>
> J'ai un champ de type datetime dans lequel je veux insérer
>
> 01/01/1900 17:32:33
>
> J'ai pas de problème ave la date si je mets '01/01/1900' mais les heures
> sont toujours 00:00:00, y a t'il une fonction du type getdate() mais qui
> prenne que l'heure ?
>
> Merci
>
>

--
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
Fred BROUARD
Simplement n'est pas possible.

En revanche avec une même date c'est possible.

En fait les dateheure sont stockées dans SQL Server sous forme de réels.
La partie entière est le nombre de jours depuis une date donnée
la partie décimale est le nombre de fraction de jour.

Exemple :

SELECT CAST(0.5 AS DATETIME)

------------------------------------------------------
1900-01-01 12:00:00.000

(1 ligne(s) affectée(s))

1/1/1900 est la date origine

Autrement dit pour n'avoir que l'heure avec toujours la même date, il
suffit de supprimer la partie entière.

Pour cela je te propose une fonction :

/****************************************************************************/
-- remplace un datetime par une datetime avec date à zero
/****************************************************************************/
CREATE FUNCTION FN_DATETIME_AS_HOUR (@DT DATETIME)
RETURNS DATETIME AS
BEGIN
RETURN CAST(CAST(@DT AS FLOAT) - FLOOR(CAST(@DT AS FLOAT)) AS DATETIME)
END
GO

-- exemple
SELECT dbo.FN_DATETIME_AS_HOUR(CURRENT_TIMESTAMP)

ensuite transtype en CHAR et coupe la partie qui t'intéresse.

Pour ma part j'utilise d'autres fonctions SQL :

/****************************************************************************/
-- affichage heure et minute extrait d'une date
/****************************************************************************/
CREATE FUNCTION FN_DATETIME_AS_HM (@DT DATETIME)
RETURNS CHAR(5) AS
BEGIN
IF @DT IS NULL RETURN NULL
DECLARE @H INT
DECLARE @M INT
SET @H = DATEPART(HOUR, @DT)
SET @M = DATEPART(MINUTE, @DT)
DECLARE @RETVAL VARCHAR(5)
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))
RETURN CAST(@RETVAL AS CHAR(5))
END
GO

Exemple :

SELECT dbo.FN_DATETIME_AS_HM(CURRENT_TIMESTAMP)

A +





jeorme a écrit:
Merci

Mais mon problème et que veux récupérer simplement l'heure


"Fred BROUARD" a écrit dans le message news:


CURRENT_TIMESTAMP fonction normative SQL !

A +

jeorme a écrit:

Bonjour,

J'ai un champ de type datetime dans lequel je veux insérer

01/01/1900 17:32:33

J'ai pas de problème ave la date si je mets '01/01/1900' mais les heures
sont toujours 00:00:00, y a t'il une fonction du type getdate() mais qui
prenne que l'heure ?

Merci





--
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: ******************









--
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
jeorme
Merci beaucoup,
J'ai réussi avec ta commande mais sans la fonction car je suis sous SQL 7 et
les fonctions n'existent pas où je ne sais pas les implémenter.

En fait je voulais insérer dans une table d'un progiciel la date '01/01/1900
11:07:15.126" par exemple avec toujours 01/01/1900, donc j'ai fait
simplement

insert into matable(monchamp)
select CAST(CAST(getdate() AS FLOAT) - FLOOR(CAST(getdate() AS FLOAT)) AS
DATETIME)

ça a l'air de marcher très bien.

Merci à toi et vive SQLPRO

"Fred BROUARD" a écrit dans le message news:

Simplement n'est pas possible.

En revanche avec une même date c'est possible.

En fait les dateheure sont stockées dans SQL Server sous forme de réels.
La partie entière est le nombre de jours depuis une date donnée
la partie décimale est le nombre de fraction de jour.

Exemple :

SELECT CAST(0.5 AS DATETIME)

------------------------------------------------------
1900-01-01 12:00:00.000

(1 ligne(s) affectée(s))

1/1/1900 est la date origine

Autrement dit pour n'avoir que l'heure avec toujours la même date, il
suffit de supprimer la partie entière.

Pour cela je te propose une fonction :




/***************************************************************************
*/
-- remplace un datetime par une datetime avec date à zero



/***************************************************************************
*/
CREATE FUNCTION FN_DATETIME_AS_HOUR (@DT DATETIME)
RETURNS DATETIME AS
BEGIN
RETURN CAST(CAST(@DT AS FLOAT) - FLOOR(CAST(@DT AS FLOAT)) AS


DATETIME)
END
GO

-- exemple
SELECT dbo.FN_DATETIME_AS_HOUR(CURRENT_TIMESTAMP)

ensuite transtype en CHAR et coupe la partie qui t'intéresse.

Pour ma part j'utilise d'autres fonctions SQL :




/***************************************************************************
*/
-- affichage heure et minute extrait d'une date



/***************************************************************************
*/
CREATE FUNCTION FN_DATETIME_AS_HM (@DT DATETIME)
RETURNS CHAR(5) AS
BEGIN
IF @DT IS NULL RETURN NULL
DECLARE @H INT
DECLARE @M INT
SET @H = DATEPART(HOUR, @DT)
SET @M = DATEPART(MINUTE, @DT)
DECLARE @RETVAL VARCHAR(5)
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))
RETURN CAST(@RETVAL AS CHAR(5))
END
GO

Exemple :

SELECT dbo.FN_DATETIME_AS_HM(CURRENT_TIMESTAMP)

A +





jeorme a écrit:
> Merci
>
> Mais mon problème et que veux récupérer simplement l'heure
>
>
> "Fred BROUARD" a écrit dans le message news:
>
>
>>CURRENT_TIMESTAMP fonction normative SQL !
>>
>>A +
>>
>>jeorme a écrit:
>>
>>>Bonjour,
>>>
>>>J'ai un champ de type datetime dans lequel je veux insérer
>>>
>>>01/01/1900 17:32:33
>>>
>>>J'ai pas de problème ave la date si je mets '01/01/1900' mais les


heures
>>>sont toujours 00:00:00, y a t'il une fonction du type getdate() mais


qui
>>>prenne que l'heure ?
>>>
>>>Merci
>>>
>>>
>>
>>--
>>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: ******************
>>
>
>
>

--
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: ******************