Conversion entiers jour, mois, ans vers Date

Le
Guillaume JAY
Bonjour,

j'ai 3 variables entières qui contiennent resp. jour, mois, an d'une
date.

Je transforme en date ainsi :
set @Result =( cast(@Day as varchar) + '/' + cast(@Month as
varchar)+ '/' + cast(@Year as varchar) )

(Result est un datetime) (SQL Server Express 2005)

Ca fonctionne, mais ca me géne de lui filer la chaine en format de
date francais. Je crains que le jour qu'il y ait un bug potentiel sur
ce point.
J'ai deux questions :
- j'imagine que ca marche en format fr parceque ma base est en
classement french_ci_as ?
- y a t il un moyen d'écrire ça pour être sur que ca marche, sans
aucun probléme de localisation ?

Merci !

Guillaume
Progress isn't made by early risers. It's made by lazy men trying to find easier ways to do something.
Robert A. Heinlein
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
gjaydie_spam_die
Le #11882421
On Sun, 02 Mar 2008 21:22:37 +0100, Guillaume JAY
Je transforme en date ainsi :
set @Result =( cast(@Day as varchar) + '/' + cast(@Month as
varchar)+ '/' + cast(@Year as varchar) )




Alors, ca m'a déjà fait un probléme, quand j'ai mis cette fonction
(car c'est une fonction) dans une clause where (dans le select, ca
fonctionne tres bien) de comparaison avec une date, que je mets au
format anglais...

J'ai vu des solutions a base de
SET DATEFORMAT
Mais a priori, j'ai pas le droit de mettre cette ligne dans une
fonction.

Guillaume
gjaydie_spam_die
Le #11882411
On Sun, 02 Mar 2008 22:01:04 +0100, wrote:
Alors, ca m'a déjà fait un probléme, quand j'ai mis cette fonction
(car c'est une fonction) dans une clause where (dans le select, ca
fonctionne tres bien) de comparaison avec une date, que je mets au
format anglais...



En fait, le probléme vient que ma base SQL Server 2005 n'accepte que
les conversion 'JJ/MM/AAAA' vers DateTime.

Je reitere ma question l est ce que c'est du au classement
French_CI_AS ou est ce que c'est indiqué ?

(Sinon, pour connvertir JJ,MM,AAAA en date, j'ai trouvé cela :

create function Date(@Year int, @Month int, @Day int)
-- returns a datetime value for the specified year, month and day
-- Thank you to Michael Valentine Jones for this formula (see
comments).
returns datetime
as
begin
return dateadd(month,((@Year-1900)*12)+@Month-1,@Day-1)
end
go


qui me plait mieux

http://weblogs.sqlteam.com/jeffs/archive/2007/01/02/56079.aspx

Guillaume
Fred BROUARD
Le #11882381
Guillaume JAY a écrit :
Bonjour,

j'ai 3 variables entières qui contiennent resp. jour, mois, an d'une
date.

Je transforme en date ainsi :
set @Result =( cast(@Day as varchar) + '/' + cast(@Month as
varchar)+ '/' + cast(@Year as varchar) )

(Result est un datetime) (SQL Server Express 2005)

Ca fonctionne, mais ca me géne de lui filer la chaine en format de
date francais. Je crains que le jour qu'il y ait un bug potentiel sur
ce point.
J'ai deux questions :
- j'imagine que ca marche en format fr parceque ma base est en
classement french_ci_as ?



non, mais parceque votre outil est installé en paramètre régionaux
français...

- y a t il un moyen d'écrire ça pour être sur que ca marche, sans
aucun probléme de localisation ?



oui au format AAAAMMJJ sans aucun séparateur. Attention : respectez bien
le nombre de chiffres => complétion avec zéro.

Lisez l'article que nous avons écrit à ce sujet :
http://baptiste-wicht.developpez.com/tutoriel/ms-sql/datetime/


Merci !

Guillaume
Progress isn't made by early risers. It's made by lazy men trying to find easier ways to do something.
Robert A. Heinlein



A +

--
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.sqlspot.com *************************
gjaydie_spam_die
Le #11882271
On Sun, 02 Mar 2008 22:48:42 +0100, Fred BROUARD
- j'imagine que ca marche en format fr parceque ma base est en
classement french_ci_as ?



non, mais parceque votre outil est installé en paramètre régionaux
français...



Ce que je comprend pas vis a vis de ce que vous me dites, c'est que
j'avais un autre probléme dans un autre outil, ou l'insertion d'une
date au format anglais plantait (pour des problemes de mois et de
jour) parceque l'user etait réglé dans sql-server comme utilisant la
langue par defaut : french.

Et quan dje l'ai mis en anglais, comme les autres, pas de souci.

oui au format AAAAMMJJ sans aucun séparateur. Attention : respectez bien
le nombre de chiffres => complétion avec zéro.

Lisez l'article que nous avons écrit à ce sujet :
http://baptiste-wicht.developpez.com/tutoriel/ms-sql/datetime/



C'est génial ça... (larticle, et le format)

Juste, pour rendre l'article encore plus génial, je pense que ca
aurait été bien de parler de la saisie ISO des heures (et des
dates/heures)

L'article ne le dit pas, ainsi que le n° ISO : 8601 sauf erreur,
toujours utile pour complément.

(genre, pour retrouver ca :
http://en.wikipedia.org/wiki/Iso_date
)

Merci, vraiment, quand je pense que ca fait des années que je fais des
bricolages...

Guillaume
Patrice
Le #11882261
[coupé]

Et quan dje l'ai mis en anglais, comme les autres, pas de souci.



Le problème est que si la date est écrite dans une requête avec un format
national spécifique, il faut que le serveur utilise ce même format national
spécifique lors de l'interpréation de la requête (sans doute "langue par
défaut" ou "set dateformat", le "classement" c'est encore autre chose).

L'utilisation explicite du format ISO (toujours interprété correctement qq
que soit le réglage du serveur) ou le passage des valeurs via des paramètres
dans les requêtes supprime ce problème...

[coupé]
Pierre Goiffon
Le #11882241
Patrice wrote:
Le problème est que si la date est écrite dans une requête avec un format
national spécifique, il faut que le serveur utilise ce même format national
spécifique lors de l'interpréation de la requête



Le paramètre régional côté serveur est lié à la session de connexion et
non à l'ensemble du serveur, sauf erreur ?
Patrice
Le #11882221
Humm, de mémoire - je n'ai plus ce problème depuis bien longtemps ;-) - la
langue par défaut peut-être définie au niveau du serveur et peut ensuite
etre supplantée connexion par connexion.

--
Patrice

"Pierre Goiffon" 47ce61d1$0$16999$
Patrice wrote:
Le problème est que si la date est écrite dans une requête avec un format
national spécifique, il faut que le serveur utilise ce même format
national spécifique lors de l'interpréation de la requête



Le paramètre régional côté serveur est lié à la session de connexion et
non à l'ensemble du serveur, sauf erreur ?


gjaydie_spam_die
Le #11882131
On Wed, 5 Mar 2008 10:27:53 +0100, "Patrice"

Humm, de mémoire - je n'ai plus ce problème depuis bien longtemps ;-) - la
langue par défaut peut-être définie au niveau du serveur et peut ensuite
etre supplantée connexion par connexion.



Je confirme, c'est ainsi.

D'ou mon probléme (idiot)

Encore merci.

Guillaume
gjaydie_spam_die
Le #11882001
On Tue, 04 Mar 2008 19:12:20 +0100, wrote:

Juste, pour rendre l'article encore plus génial, je pense que ca
aurait été bien de parler de la saisie ISO des heures (et des
dates/heures)



Surtout qu'il semblerait que SQL Server soit pas strictement
compatible ISO (notamment pour le format 8601 sans séparateur)
cf
http://www.karaszi.com/SQLServer/info_datetime.asp

et mes essais)

Et dans cet article y a un passage sur le fait que le format ANSI SQL
(souvent refere a tor comme ISO => c'est effectivementc e qu'on
m'avait dit a tort ) est dépendent des SET DATEFORMAT et LANGUAGE.


Guillaume
Publicité
Poster une réponse
Anonyme