OVH Cloud OVH Cloud

conversion d'une date en integer

5 réponses
Avatar
Philippe
Bonjour à tous,

Je pense avoir bien compris que SQL server stockent les dates et les heures
séparément d'un coté les jours écoulés depuis une date (1/1/1753 : datetime
ou 1/1/1900 smalldatetime) et d'un autre les millisecondes écoulées depuis
minuit pour le jour indiqué dans la date

Comment obtenir cette durées en secondes et/ou millisecondes , à part
utiliser une fonction scalaire qui utilisera datepart (hour, minute ...)

Que renvoie cast(myDate as bigint)

Merci pour votre aide

Philippe
CIA IT

5 réponses

Avatar
GLB
Salut Philippe,

Ceci est tiré de l'aide

Microsoft SQL Server stocke de manière interne les valeurs de type
datetime sous la forme de deux entiers de 4 octets. Les 4 premiers
octets contiennent le nombre de jours écoulés avant ou après la date de
base (base date) du 1er janvier 1900, qui sert de référence au système.
Les valeurs datetime représentant des dates antérieures au 1er janvier
1753 ne sont pas autorisées. Les 4 autres octets stockent l'heure du
jour représentée par le nombre de millièmes de seconde après minuit.

Le type de donnée smalldatetime stocke les dates et les heures du jour
avec une précision inférieure à celle du type datetime. SQL Server
stocke les valeurs smalldatetime sous la forme de deux entiers de 2
octets. Les deux premiers octets contiennent le nombre de jours après le
premier janvier 1900. Les deux autres octets stockent le nombre de
minutes écoulées après minuit. Ce type de données permet de stocker les
dates comprises entre le 1er janvier 1900 et le 6 juin 2079, avec une
précision d'une minute.



Dans le cas d'un datetime si tu cast avec un INT tu doit rcupérer les
milisecondes et pour un smalldatetime tu cast avec un SmallINT !

ce ne sont que des suppositions :-)

Non testé

Gilles






Philippe a écrit :
Bonjour à tous,

Je pense avoir bien compris que SQL server stockent les dates et les heures
séparément d'un coté les jours écoulés depuis une date (1/1/1753 : datetime
ou 1/1/1900 smalldatetime) et d'un autre les millisecondes écoulées depuis
minuit pour le jour indiqué dans la date

Comment obtenir cette durées en secondes et/ou millisecondes , à part
utiliser une fonction scalaire qui utilisera datepart (hour, minute ...)

Que renvoie cast(myDate as bigint)

Merci pour votre aide

Philippe
CIA IT







Avatar
Fred BROUARD
Philippe a écrit :
Bonjour à tous,

Je pense avoir bien compris que SQL server stockent les dates et les heures
séparément d'un coté les jours écoulés depuis une date (1/1/1753 : datetime
ou 1/1/1900 smalldatetime) et d'un autre les millisecondes écoulées depuis
minuit pour le jour indiqué dans la date

Comment obtenir cette durées en secondes et/ou millisecondes , à part
utiliser une fonction scalaire qui utilisera datepart (hour, minute ...)

Que renvoie cast(myDate as bigint)



CAST (myDate AS FLOAT) vous renverra :
partie entière => nombre de jour depuis 1/1/1900
partie fractionnaire => nombre de fraction de jour.

Ainsi, si
CAST(myDate AS FLOAT) donne 37000.5 nous sommes le 21/4/2001 à midi.
Pour le temps en minute :
.5 * 24 * 60 = 720 minutes.
etc

A +

Merci pour votre aide

Philippe
CIA IT









--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
Philippe
Gilles, Merci pour cette réponse,

pour être plus précis comment recupérer ou "mapper" .en integer la valeur
des deux (4)octects partie date et la valeur des deux (4) octets partie
time.

Le cast de la date ne retourne pas la durée , mais après test , retourne le
nombre de jours écoulés depuis 1/1/1900 , que la date soit déclarée en
datetime ou smalldatetime

Philippe



"GLB" a écrit dans le message de news:
eh%
Salut Philippe,

Ceci est tiré de l'aide

Microsoft SQL Server stocke de manière interne les valeurs de type
datetime sous la forme de deux entiers de 4 octets. Les 4 premiers octets
contiennent le nombre de jours écoulés avant ou après la date de base
(base date) du 1er janvier 1900, qui sert de référence au système. Les
valeurs datetime représentant des dates antérieures au 1er janvier 1753 ne
sont pas autorisées. Les 4 autres octets stockent l'heure du jour
représentée par le nombre de millièmes de seconde après minuit.

Le type de donnée smalldatetime stocke les dates et les heures du jour
avec une précision inférieure à celle du type datetime. SQL Server stocke
les valeurs smalldatetime sous la forme de deux entiers de 2 octets. Les
deux premiers octets contiennent le nombre de jours après le premier
janvier 1900. Les deux autres octets stockent le nombre de minutes
écoulées après minuit. Ce type de données permet de stocker les dates
comprises entre le 1er janvier 1900 et le 6 juin 2079, avec une précision
d'une minute.



Dans le cas d'un datetime si tu cast avec un INT tu doit rcupérer les
milisecondes et pour un smalldatetime tu cast avec un SmallINT !

ce ne sont que des suppositions :-)

Non testé

Gilles






Philippe a écrit :
Bonjour à tous,

Je pense avoir bien compris que SQL server stockent les dates et les
heures séparément d'un coté les jours écoulés depuis une date (1/1/1753
: datetime ou 1/1/1900 smalldatetime) et d'un autre les millisecondes
écoulées depuis minuit pour le jour indiqué dans la date

Comment obtenir cette durées en secondes et/ou millisecondes , à part
utiliser une fonction scalaire qui utilisera datepart (hour, minute ...)

Que renvoie cast(myDate as bigint)

Merci pour votre aide

Philippe
CIA IT








Avatar
Gilles LE BARBIER
Merci fred

je n'avais pas trouvé cette info sur l'aide !!

A+

Gilles
Avatar
Philippe
OK merci,
je n'avais pas eu le reflex du float

Philippe

"Fred BROUARD" a écrit dans le message de news:
eltjk$
Philippe a écrit :
Bonjour à tous,

Je pense avoir bien compris que SQL server stockent les dates et les
heures séparément d'un coté les jours écoulés depuis une date (1/1/1753
: datetime ou 1/1/1900 smalldatetime) et d'un autre les millisecondes
écoulées depuis minuit pour le jour indiqué dans la date

Comment obtenir cette durées en secondes et/ou millisecondes , à part
utiliser une fonction scalaire qui utilisera datepart (hour, minute ...)

Que renvoie cast(myDate as bigint)



CAST (myDate AS FLOAT) vous renverra :
partie entière => nombre de jour depuis 1/1/1900
partie fractionnaire => nombre de fraction de jour.

Ainsi, si
CAST(myDate AS FLOAT) donne 37000.5 nous sommes le 21/4/2001 à midi.
Pour le temps en minute :
.5 * 24 * 60 = 720 minutes.
etc

A +

Merci pour votre aide

Philippe
CIA IT









--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************