OVH Cloud OVH Cloud

datetime ASPX et SQL Server

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

5 réponses

Avatar
F.S
Bonjour,
- Dans votre code sql utilisez CONVERT(DATETIME, XXX) ou CAST(@Mydate AS
DATETIME)
- Dans la clause WHERE utilisez plutot DATEDIFF pour comparer les dates et
non pas > = <.
- et enfin modifier le format de la date sur le serveur SQL dans "Options
régionales"
F.S
"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
Fred BROUARD
Aucun soucis de mon coté sur un type DATETIME :

CREATE TABLE T_DATE
(DT DATETIME)

INSERT INTO T_DATE
SELECT CAST('20041018 05:18:36' AS DATETIME)

SELECT *
FROM T_DATE

DT
------------------------------------------------------
2004-10-18 05:18:36.000

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

N'auriez vous pas par hasard utilisé un type SMALLDATETIME ?

Sinon, sachez que la précision de SQL Server est de 3 millième de seconde (et
non 3 centième comme annoncé par erreur dans l'aide en ligne)

A +



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



--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
Avatar
Rahan
effectivement je suis en smalldatetime !!

-----Message d'origine-----
Aucun soucis de mon coté sur un type DATETIME :

CREATE TABLE T_DATE
(DT DATETIME)

INSERT INTO T_DATE
SELECT CAST('20041018 05:18:36' AS DATETIME)

SELECT *
FROM T_DATE

DT
------------------------------------------------------
2004-10-18 05:18:36.000

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

N'auriez vous pas par hasard utilisé un type


SMALLDATETIME ?

Sinon, sachez que la précision de SQL Server est de 3


millième de seconde (et
non 3 centième comme annoncé par erreur dans l'aide en


ligne)

A +



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



--
Frédéric BROUARD, MVP SQL Server. Expert SQL /


spécialiste 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
************************ www.datasapiens.com


*************************

.



Avatar
Rahan
excuse je viens de dire des betises !!

je suis bien en datetime, concernant l exemple, quand je
fait select DateFin+convert(float,heurefin)/24
avec un datefin quelconque et heurefin 5.31 par ex
sql me donne :
2004-10-18 05:18:35.997
alors que sous vb .net
2004-10-18 05:18:36.000

c la le pb qui se pose

A+


-----Message d'origine-----
Aucun soucis de mon coté sur un type DATETIME :

CREATE TABLE T_DATE
(DT DATETIME)

INSERT INTO T_DATE
SELECT CAST('20041018 05:18:36' AS DATETIME)

SELECT *
FROM T_DATE

DT
------------------------------------------------------
2004-10-18 05:18:36.000

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

N'auriez vous pas par hasard utilisé un type


SMALLDATETIME ?

Sinon, sachez que la précision de SQL Server est de 3


millième de seconde (et
non 3 centième comme annoncé par erreur dans l'aide en


ligne)

A +



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



--
Frédéric BROUARD, MVP SQL Server. Expert SQL /


spécialiste 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
************************ www.datasapiens.com


*************************

.



Avatar
Fred BROUARD
c'est un peu normal : le float ne représenta pas exactement un décimal. Il
induit donc des calculs d'arrondis.
Essaye de modifier la strutucre de ton expression, du genre :

SELECT CAST((((CAST(DateFin AS FLOAT) * 24) +heurefin) / 24 ) AS DATETIME)

Cela peut provenir d'un problème classique en informatique / mesure physique :
erreur d'écart d'arrondis.

A +

Rahan a écrit:
excuse je viens de dire des betises !!

je suis bien en datetime, concernant l exemple, quand je
fait select DateFin+convert(float,heurefin)/24
avec un datefin quelconque et heurefin 5.31 par ex
sql me donne :
2004-10-18 05:18:35.997
alors que sous vb .net
2004-10-18 05:18:36.000

c la le pb qui se pose

A+



-----Message d'origine-----
Aucun soucis de mon coté sur un type DATETIME :

CREATE TABLE T_DATE
(DT DATETIME)

INSERT INTO T_DATE
SELECT CAST('20041018 05:18:36' AS DATETIME)

SELECT *



FROM T_DATE



DT
------------------------------------------------------
2004-10-18 05:18:36.000

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

N'auriez vous pas par hasard utilisé un type



SMALLDATETIME ?

Sinon, sachez que la précision de SQL Server est de 3



millième de seconde (et

non 3 centième comme annoncé par erreur dans l'aide en



ligne)

A +



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



--
Frédéric BROUARD, MVP SQL Server. Expert SQL /



spécialiste 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

************************ www.datasapiens.com



*************************

.









--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************