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
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
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.
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 ?????????
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.
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
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.
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 ?????????
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 ?
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 ?????????
.
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 ?
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
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 ?
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