OVH Cloud OVH Cloud

dateime aspx et sql server

2 réponses
Avatar
Rahan
Salut a tous

j ai un soucis de precision entre la construction d un
datetime en ASPX et en SQL Server
je m explique

ds mon datagrid je recupere et construit un datetime via
2 champ datefin et heurefin
dteFin = CDate(CType(dgItem.Cells(25).Controls(1),
TextBox).Text).AddHours(CType(dgItem.Cells(26).Controls
(1), TextBox).Text)
ensuite je passe en parametre cette valeur via un sql
.......
where DateFin+convert(float,heurefin)/24>@DateFin

et la j ai un soucis de precision car si par exemple
dteFin=18/10/2004 05:18:36
cette meme construction par sql me donne
2004-10-18 05:18:35.997

et donc mon sql me ramene des valeurs que je ne devrais
pas avoir

une idee ?????????

2 réponses

Avatar
Philippe LALOUM
Bonjour,

La précision d'un type DateTime SQLServer est de 1/300 de seconde. Ainsi,
les secondes d'un DateTime sont arrondies à des incréments de .000, .003 et
.007.
Par ailleurs, convertir une DateTime (votre colonne HeureFin) en float,
revient à obtenir une représation décimale exprimée en jour de la DateTime:
cette conversion peut conduire à une perte de précision, lorque le résultat
est ajouté (opérateur +) à votre colonne DateFin.
Pour éviter cette perte de précision, sachant que votre heure de fin n'est
probablement pas saisie avec une précision supèrieure à la seconde, il est
préférable d'avoir recours aux fonctions DatePart et DateAdd de Transact SQL
pour calculervotre date de fin avec la précision voulue (la seconde) et la
comparer au paramètre passé @DateFin.

Pour infos concernant le type DateTime:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsqlpro04/html/sp04e9.asp


"Rahan" a écrit :

Salut a tous

j ai un soucis de precision entre la construction d un
datetime en ASPX et en SQL Server
je m explique

ds mon datagrid je recupere et construit un datetime via
2 champ datefin et heurefin
dteFin = CDate(CType(dgItem.Cells(25).Controls(1),
TextBox).Text).AddHours(CType(dgItem.Cells(26).Controls
(1), TextBox).Text)
ensuite je passe en parametre cette valeur via un sql
........
where DateFin+convert(float,heurefin)/24>@DateFin

et la j ai un soucis de precision car si par exemple
dteFin/10/2004 05:18:36
cette meme construction par sql me donne
2004-10-18 05:18:35.997

et donc mon sql me ramene des valeurs que je ne devrais
pas avoir

une idee ?????????




Avatar
Rahan
merci pour ta reponse mais comment justement ajouter a ma
date mes heures ? j ai essaye au niveau des heures de
faire convert(datetime,heurefin) puis utilise dateadd
mais je pense qu un truc m echappe, tu peux me donner un
exemple ?




-----Message d'origine-----
Bonjour,

La précision d'un type DateTime SQLServer est de 1/300


de seconde. Ainsi,
les secondes d'un DateTime sont arrondies à des


incréments de .000, .003 et
..007.
Par ailleurs, convertir une DateTime (votre colonne


HeureFin) en float,
revient à obtenir une représation décimale exprimée


en jour de la DateTime:
cette conversion peut conduire à une perte de


précision, lorque le résultat
est ajouté (opérateur +) à votre colonne DateFin.
Pour éviter cette perte de précision, sachant que


votre heure de fin n'est
probablement pas saisie avec une précision supèrieure


à la seconde, il est
préférable d'avoir recours aux fonctions DatePart et


DateAdd de Transact SQL
pour calculervotre date de fin avec la précision voulue


(la seconde) et la
comparer au paramètre passé @DateFin.

Pour infos concernant le type DateTime:

http://msdn.microsoft.com/library/default.asp?


url=/library/en-us/dnsqlpro04/html/sp04e9.asp


"Rahan" a écrit :

Salut a tous

j ai un soucis de precision entre la construction d un
datetime en ASPX et en SQL Server
je m explique

ds mon datagrid je recupere et construit un datetime




via
2 champ datefin et heurefin
dteFin = CDate(CType(dgItem.Cells(25).Controls(1),
TextBox).Text).AddHours(CType(dgItem.Cells(26).Controls
(1), TextBox).Text)
ensuite je passe en parametre cette valeur via un sql
........
where DateFin+convert(float,heurefin)/24>@DateFin

et la j ai un soucis de precision car si par exemple
dteFin/10/2004 05:18:36
cette meme construction par sql me donne
2004-10-18 05:18:35.997

et donc mon sql me ramene des valeurs que je ne




devrais
pas avoir

une idee ?????????




.