Requete en ligne de commande avec date

cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 - 30 nov. 2006 à 18:30
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 - 1 déc. 2006 à 14:35
bonjour,
j aimerais faire une requete avec un tri en fonction de la date (en ligne de commande)
genre where ma-date>"1/1/2006"
mais ca ne fonctionne pas (ma-date est un smalldatetime)
quelle fonction utiliser pour convertir cela en date ou comment faire ?

Merci

5 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
1 déc. 2006 à 09:23
le plus propre est d'utiliser un parameter...
Propriété Parameters de l'object DbCommand.

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
0
estalex Messages postés 8 Date d'inscription mercredi 10 décembre 2003 Statut Membre Dernière intervention 16 mai 2007
1 déc. 2006 à 10:03
Hello,
Tu peux essayer quelque chose comme ça...
--1/ La valeur à manipuler à partir d'une commandeText standard
DECLARE @ddLogDate varchar(20)
SET @ddLogDate  = '15.02.2006'


--2/ ici tu charge la langue du serveur puis tu mets la langue pour le format  french dd.mm.aaaa us_english mm/dd/aaaa
DECLARE @LangTemp char(20)
SET @LangTemp = @@LANGUAGE
SET LANGUAGE French


--3/ Maniplation de la string vers un smalldatetime
DECLARE @dLogDate smalldatetime
SET @dLogDate = CAST(@ddLogDate AS smalldatetime)
SELECT @dLogDate


--4/ remmetre le serveur dans son état original
SET LANGUAGE  @LangTemp

bonne chance
Estalex
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
1 déc. 2006 à 10:07
euh... c'est quoi le rapport avec C# là ?

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
0
estalex Messages postés 8 Date d'inscription mercredi 10 décembre 2003 Statut Membre Dernière intervention 16 mai 2007
1 déc. 2006 à 13:56
En fait, il existe un grand problème liée à la langue du serveur SQL... ex. si t'envoie  une date 31.12.2006 sur un serveur us_english(mm/jj/aaaa), il ne reconnait pas le mois 31!!!! dans le cas où on a besoin de pouvoir maitriser les divers états du serveur sql, on peut utiliser ça pour encpsuler les requêtes avec des dates... L'idéal c'est toujours d'encapsuler  les requêtes dans des procedures stockées.
Mais ce type de code (ci dessus) peut passer dans un commandText.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
1 déc. 2006 à 14:35
non non non...

ca ne sert à rien de procéder ainsi.
Je travaille tous les jours sur les dates, avec tantot une base en anglais, tantot une base en français... et je n'ai jamais eu ce souci.
Imagine tout simplement l'exemple suivant :

1. T'es en dev avec une base en français, tu mets ton bout de code... ca marche ok... t'es content.
2. Tu passes en prod, la base est en anglais... ca ne marche plus !

De plus, tu "spécifies" ton code pour un moteur particulier... demain, si tu veux migrer sur du DB2, de l'Oracle, Access voire du MySql... ton code échouera.

La solution, c'est de passer par les requêtes (ou procédures stockées) avec des paramètres.
exemple :
DbCommand cmd = dbConn.CreateCommand();
cmd.CommandText = "select * from maTable where maDate > @maDate";
cmd.CommandType = CommandType.Text;

DbParameter param = cmd.CreateParameter();
param.ParameterName = "@maDate";
param.DbType = DbType.DateTime;
param.Value = DateTime.Now;

cmd.Parameters.Add(param);

...

Cet exemple fonctionne à tous les coups !

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
0
Rejoignez-nous