OVH Cloud OVH Cloud

Problème de cast

8 réponses
Avatar
Seb
Bonjour,

Dans ma base de donn=E9es, j'ai une date au format datetime.
J'avais rencontr=E9 un probl=E8me d'affichage (=E7a me mettait=20
la date jj/mm/aaaa 00:00:00)
Donc pour supprimer les 0 inutiles, j'avais d=E9cid=E9 de=20
faire un convert au niveau de ma proc=E9dure stock=E9e.
Donc je faisais un :=20
CONVERT(NVARCHAR(10),mydate,103)AS mydate

Mon probl=E8me c'est que je dois faire un ORDER BY sur ma=20
date, et vu qu'elle est convertie en nvarchar, =E7a ne=20
marche pas.

Est-il possible de faire ce cast pour avoir le bon format=20
directement dans la proc stock=E9e, ou est-ce que je dois=20
le modifier =E0 la main dans mon code.
Dans tous les cas, comment dois-je faire ?

Merci d'avance.

Seb

8 réponses

Avatar
LEBRUN Thomas
Plutôt qur faire un CONVERT, pourquoi tu fais pas un SUBSTRING : cela te permet de concerver ta date dans le format datetime

SUBSTRING(mydate, 0, 10)

devrait fonctioner

A+
--
LEBRUN Thomas
Comment poster une question: http://www.gnurou.org/documents/smart-questions-fr.html


"Seb" a écrit :

Bonjour,

Dans ma base de données, j'ai une date au format datetime.
J'avais rencontré un problème d'affichage (ça me mettait
la date jj/mm/aaaa 00:00:00)
Donc pour supprimer les 0 inutiles, j'avais décidé de
faire un convert au niveau de ma procédure stockée.
Donc je faisais un :
CONVERT(NVARCHAR(10),mydate,103)AS mydate

Mon problème c'est que je dois faire un ORDER BY sur ma
date, et vu qu'elle est convertie en nvarchar, ça ne
marche pas.

Est-il possible de faire ce cast pour avoir le bon format
directement dans la proc stockée, ou est-ce que je dois
le modifier à la main dans mon code.
Dans tous les cas, comment dois-je faire ?

Merci d'avance.

Seb



Avatar
Seb
En fait, substring ne peut pas s'appliquer aux dates :
SUBSTRING ( expression , start , length )

expression

Chaîne de caractères, chaîne binaire, texte, image,
colonne, ou expression qui comprend une colonne.
N'utilisez pas d'expression comprenant des fonctions
d'agrégation.

Tu as une autre idée ?

Merci Seb


-----Message d'origine-----
Plutôt qur faire un CONVERT, pourquoi tu fais pas un


SUBSTRING : cela te permet de concerver ta date dans le
format datetime

SUBSTRING(mydate, 0, 10)

devrait fonctioner

A+
--
LEBRUN Thomas
Comment poster une question:


http://www.gnurou.org/documents/smart-questions-fr.html


"Seb" a écrit :

Bonjour,

Dans ma base de données, j'ai une date au format




datetime.
J'avais rencontré un problème d'affichage (ça me




mettait
la date jj/mm/aaaa 00:00:00)
Donc pour supprimer les 0 inutiles, j'avais décidé




de
faire un convert au niveau de ma procédure stockée.
Donc je faisais un :
CONVERT(NVARCHAR(10),mydate,103)AS mydate

Mon problème c'est que je dois faire un ORDER BY sur




ma
date, et vu qu'elle est convertie en nvarchar, ça ne
marche pas.

Est-il possible de faire ce cast pour avoir le bon




format
directement dans la proc stockée, ou est-ce que je




dois
le modifier à la main dans mon code.
Dans tous les cas, comment dois-je faire ?

Merci d'avance.

Seb



.



Avatar
c2i-Richard Clark [MVP]
Je comprends pas le pb ?!!!
Si c'est uiquement une question d'affichage, tu n'as qu'a utliser l'une des
surcharges de ToString() du DateTime. Par exemple :

d.ToString("dd/MM/yy")

ou

d.ToString("D")

etc.

--
Richard Clark
http://www.c2i.fr - Le portail .NET
[Microsoft MVP .NET]
______________________________________________
'Au coeur de VB .NET' (MS Press, 430 pages, 34 euros)
http://www.amazon.fr/exec/obidos/ASIN/2100065645/c2ifrleportad-21
______________________________________________

"Seb" wrote in message
news:116101c46f08$1e1d1360$
Bonjour,

Dans ma base de données, j'ai une date au format datetime.
J'avais rencontré un problème d'affichage (ça me mettait
la date jj/mm/aaaa 00:00:00)
Donc pour supprimer les 0 inutiles, j'avais décidé de
faire un convert au niveau de ma procédure stockée.
Donc je faisais un :
CONVERT(NVARCHAR(10),mydate,103)AS mydate

Mon problème c'est que je dois faire un ORDER BY sur ma
date, et vu qu'elle est convertie en nvarchar, ça ne
marche pas.

Est-il possible de faire ce cast pour avoir le bon format
directement dans la proc stockée, ou est-ce que je dois
le modifier à la main dans mon code.
Dans tous les cas, comment dois-je faire ?

Merci d'avance.

Seb
Avatar
LEBRUN Thomas
Regarde la réponse de Richard Clark :

fais ta requête normalement (avec le orfer by) et après, lors de l'affichage, utilise la surcharge de ToString()

A+

--
LEBRUN Thomas
Comment poster une question: http://www.gnurou.org/documents/smart-questions-fr.html


"Seb" a écrit :

En fait, substring ne peut pas s'appliquer aux dates :
SUBSTRING ( expression , start , length )

expression

Chaîne de caractères, chaîne binaire, texte, image,
colonne, ou expression qui comprend une colonne.
N'utilisez pas d'expression comprenant des fonctions
d'agrégation.

Tu as une autre idée ?

Merci Seb


>-----Message d'origine-----
>Plutôt qur faire un CONVERT, pourquoi tu fais pas un
SUBSTRING : cela te permet de concerver ta date dans le
format datetime
>
>SUBSTRING(mydate, 0, 10)
>
>devrait fonctioner
>
>A+
>--
>LEBRUN Thomas
>Comment poster une question:
http://www.gnurou.org/documents/smart-questions-fr.html
>
>
>"Seb" a écrit :
>
>> Bonjour,
>>
>> Dans ma base de données, j'ai une date au format
datetime.
>> J'avais rencontré un problème d'affichage (ça me
mettait
>> la date jj/mm/aaaa 00:00:00)
>> Donc pour supprimer les 0 inutiles, j'avais décidé
de
>> faire un convert au niveau de ma procédure stockée.
>> Donc je faisais un :
>> CONVERT(NVARCHAR(10),mydate,103)AS mydate
>>
>> Mon problème c'est que je dois faire un ORDER BY sur
ma
>> date, et vu qu'elle est convertie en nvarchar, ça ne
>> marche pas.
>>
>> Est-il possible de faire ce cast pour avoir le bon
format
>> directement dans la proc stockée, ou est-ce que je
dois
>> le modifier à la main dans mon code.
>> Dans tous les cas, comment dois-je faire ?
>>
>> Merci d'avance.
>>
>> Seb
>>
>.
>



Avatar
Seb
Mon problème se situe à deux niveaux :
- je veux que ma proc stockée me renvoie une date au
format jj/mm/aaaa (et non pas jj/mm/aaaa hh:mm:ss)
- Je veux faire un tri sur cette même date. Donc je ne
peux pas faire de convert(nvarchar(10), car ça me
renverrait une chaine de caractère, et dans ce cas là, la
date 30/04/2004 est supérieure à 21/07/2004

Est-ce que vous avez des idées ?

Merci

Seb


-----Message d'origine-----
Je comprends pas le pb ?!!!
Si c'est uiquement une question d'affichage, tu n'as


qu'a utliser l'une des
surcharges de ToString() du DateTime. Par exemple :

d.ToString("dd/MM/yy")

ou

d.ToString("D")

etc.

--
Richard Clark
http://www.c2i.fr - Le portail .NET
[Microsoft MVP .NET]
______________________________________________
'Au coeur de VB .NET' (MS Press, 430 pages, 34 euros)
http://www.amazon.fr/exec/obidos/ASIN/2100065645/c2ifrlep


ortad-21
______________________________________________

"Seb" wrote in


message
news:116101c46f08$1e1d1360$
Bonjour,

Dans ma base de données, j'ai une date au format


datetime.
J'avais rencontré un problème d'affichage (ça me mettait
la date jj/mm/aaaa 00:00:00)
Donc pour supprimer les 0 inutiles, j'avais décidé de
faire un convert au niveau de ma procédure stockée.
Donc je faisais un :
CONVERT(NVARCHAR(10),mydate,103)AS mydate

Mon problème c'est que je dois faire un ORDER BY sur ma
date, et vu qu'elle est convertie en nvarchar, ça ne
marche pas.

Est-il possible de faire ce cast pour avoir le bon format
directement dans la proc stockée, ou est-ce que je dois
le modifier à la main dans mon code.
Dans tous les cas, comment dois-je faire ?

Merci d'avance.

Seb


.



Avatar
Seb
En fait, je voulais savoir s'il existe un moyen pour que
la procédure stockée me renvoit directement les valeurs
au bon format, parce que je trouve ça plus simple, mais
s'il n'existe rien pour résoudre mon problème tant pis.

Merci à tous.

Seb

-----Message d'origine-----
Regarde la réponse de Richard Clark :

fais ta requête normalement (avec le orfer by) et


après, lors de l'affichage, utilise la surcharge de
ToString()

A+

--
LEBRUN Thomas
Comment poster une question:


http://www.gnurou.org/documents/smart-questions-fr.html


"Seb" a écrit :

En fait, substring ne peut pas s'appliquer aux dates :
SUBSTRING ( expression , start , length )

expression

Chaîne de caractères, chaîne binaire, texte, image,
colonne, ou expression qui comprend une colonne.
N'utilisez pas d'expression comprenant des fonctions
d'agrégation.

Tu as une autre idée ?

Merci Seb


>-----Message d'origine-----
>PlutÃf´t qur faire un CONVERT, pourquoi tu fais pas




un
SUBSTRING : cela te permet de concerver ta date dans




le
format datetime
>
>SUBSTRING(mydate, 0, 10)
>
>devrait fonctioner
>
>A+
>--
>LEBRUN Thomas
>Comment poster une question:
http://www.gnurou.org/documents/smart-questions-fr.html
>
>
>"Seb" a Ãf©crit :
>
>> Bonjour,
>>
>> Dans ma base de donnÃf©es, j'ai une date au format
datetime.
>> J'avais rencontrÃf© un problÃf¨me d'affichage




(Ãf§a me
mettait
>> la date jj/mm/aaaa 00:00:00)
>> Donc pour supprimer les 0 inutiles, j'avais




dÃf©cidÃf©
de
>> faire un convert au niveau de ma procÃf©dure




stockÃf©e.
>> Donc je faisais un :
>> CONVERT(NVARCHAR(10),mydate,103)AS mydate
>>
>> Mon problÃf¨me c'est que je dois faire un ORDER BY




sur
ma
>> date, et vu qu'elle est convertie en nvarchar,




Ãf§a ne
>> marche pas.
>>
>> Est-il possible de faire ce cast pour avoir le bon
format
>> directement dans la proc stockÃf©e, ou est-ce que




je
dois
>> le modifier Ãf la main dans mon code.
>> Dans tous les cas, comment dois-je faire ?
>>
>> Merci d'avance.
>>
>> Seb
>>
>.
>



.



Avatar
Zim
SQL n'est pas vraiment fait pour le formattage de données .... laisse donc
ton application se charger de ça.
Sinon, si tu souhaite vraiment bouffer de ressources pour rien , tu peux
passer par une table temporaire qui contient ta jeu de résultat trié par
date,
puis lire cette table temporaire en "castant" la date en varchar ...

Zim.


"Seb" wrote in message
news:12bc01c46f1e$9cd2cfe0$
Mon problème se situe à deux niveaux :
- je veux que ma proc stockée me renvoie une date au
format jj/mm/aaaa (et non pas jj/mm/aaaa hh:mm:ss)
- Je veux faire un tri sur cette même date. Donc je ne
peux pas faire de convert(nvarchar(10), car ça me
renverrait une chaine de caractère, et dans ce cas là, la
date 30/04/2004 est supérieure à 21/07/2004

Est-ce que vous avez des idées ?

Merci

Seb


-----Message d'origine-----
Je comprends pas le pb ?!!!
Si c'est uiquement une question d'affichage, tu n'as


qu'a utliser l'une des
surcharges de ToString() du DateTime. Par exemple :

d.ToString("dd/MM/yy")

ou

d.ToString("D")

etc.

--
Richard Clark
http://www.c2i.fr - Le portail .NET
[Microsoft MVP .NET]
______________________________________________
'Au coeur de VB .NET' (MS Press, 430 pages, 34 euros)
http://www.amazon.fr/exec/obidos/ASIN/2100065645/c2ifrlep


ortad-21
______________________________________________

"Seb" wrote in


message
news:116101c46f08$1e1d1360$
Bonjour,

Dans ma base de données, j'ai une date au format


datetime.
J'avais rencontré un problème d'affichage (ça me mettait
la date jj/mm/aaaa 00:00:00)
Donc pour supprimer les 0 inutiles, j'avais décidé de
faire un convert au niveau de ma procédure stockée.
Donc je faisais un :
CONVERT(NVARCHAR(10),mydate,103)AS mydate

Mon problème c'est que je dois faire un ORDER BY sur ma
date, et vu qu'elle est convertie en nvarchar, ça ne
marche pas.

Est-il possible de faire ce cast pour avoir le bon format
directement dans la proc stockée, ou est-ce que je dois
le modifier à la main dans mon code.
Dans tous les cas, comment dois-je faire ?

Merci d'avance.

Seb


.



Avatar
Seb
Problème résolu.
Merci à tous pour vos conseils.
Finalement, j'ai supprimé le convert de la proc stockée
qui était source d'erreur, et j'ai laissé le order by.
J'ai géré le formattage des données dans mes webforms, et
ça tourne.
Et apparemment c'est la meilleure solution d'après ce que
j'ai lu de vos commentaires, donc encore merci.

A++.

Seb.

-----Message d'origine-----
SQL n'est pas vraiment fait pour le formattage de


données .... laisse donc
ton application se charger de ça.
Sinon, si tu souhaite vraiment bouffer de ressources


pour rien , tu peux
passer par une table temporaire qui contient ta jeu de


résultat trié par
date,
puis lire cette table temporaire en "castant" la date en


varchar ...

Zim.


"Seb" wrote in


message
news:12bc01c46f1e$9cd2cfe0$
Mon problème se situe à deux niveaux :
- je veux que ma proc stockée me renvoie une date au
format jj/mm/aaaa (et non pas jj/mm/aaaa hh:mm:ss)
- Je veux faire un tri sur cette même date. Donc je ne
peux pas faire de convert(nvarchar(10), car ça me
renverrait une chaine de caractère, et dans ce cas là, la
date 30/04/2004 est supérieure à 21/07/2004

Est-ce que vous avez des idées ?

Merci

Seb


-----Message d'origine-----
Je comprends pas le pb ?!!!
Si c'est uiquement une question d'affichage, tu n'as


qu'a utliser l'une des
surcharges de ToString() du DateTime. Par exemple :

d.ToString("dd/MM/yy")

ou

d.ToString("D")

etc.

--
Richard Clark
http://www.c2i.fr - Le portail .NET
[Microsoft MVP .NET]
______________________________________________
'Au coeur de VB .NET' (MS Press, 430 pages, 34 euros)
http://www.amazon.fr/exec/obidos/ASIN/2100065645/c2ifrle




p
ortad-21
______________________________________________

"Seb" wrote in


message
news:116101c46f08$1e1d1360$
Bonjour,

Dans ma base de données, j'ai une date au format


datetime.
J'avais rencontré un problème d'affichage (ça me mettait
la date jj/mm/aaaa 00:00:00)
Donc pour supprimer les 0 inutiles, j'avais décidé de
faire un convert au niveau de ma procédure stockée.
Donc je faisais un :
CONVERT(NVARCHAR(10),mydate,103)AS mydate

Mon problème c'est que je dois faire un ORDER BY sur ma
date, et vu qu'elle est convertie en nvarchar, ça ne
marche pas.

Est-il possible de faire ce cast pour avoir le bon




format
directement dans la proc stockée, ou est-ce que je dois
le modifier à la main dans mon code.
Dans tous les cas, comment dois-je faire ?

Merci d'avance.

Seb


.





.