Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2722 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  SQLServer : Problème de datetime

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SQLServer : Problème de datetime

n°1385637
oggo
no woman no cry
Posté le 12-06-2006 à 10:56:25  profilanswer
 

Bonjour, j'ai une procédure stockée dans laquelle je passe un parametre date de type DATETIME.
Je dois utiliser un varchar pour ma requête car j'ai un parametre orderBy et SQLServer n'accepte pas des variables dans un order by..Mais cela me pose probleme lorsque je veux également utiliser le paramètre date.
-> Erreur de syntaxe lors de la conversion d'une valeur datetime à partir d'une chaine de caracteres
Je précise que cela fonctionne tb lorsque je n'utilise pas le paramètre orderBy et donc en utilisant une requête sans passer par le varchar. J'ai également utiliser cast, convert, etc je suis à cours d'idée malheureusement.
Auriez vous une solution? merci d'avance
 
CREATE PROCEDURE recherche @date datetime, @orderBy varchar(20) AS
DECLARE @tri varchar(50)
DECLARE @Str varchar(1000)
set @tri = ' ORDER BY '+@orderBy
Select @Str ='SELECT * FROM matable WHERE date > '+@date + @tri
exec (@Str)
GO

Message cité 1 fois
Message édité par oggo le 12-06-2006 à 11:09:58
mood
Publicité
Posté le 12-06-2006 à 10:56:25  profilanswer
 

n°1385662
RavenShado​W1
Posté le 12-06-2006 à 11:22:54  profilanswer
 

formate d'abord ta date au bon format :)  format(date; "jj/mm/aaaa" )  ... ( jcrois que c ca la syntaxe :p lol )

n°1385673
oggo
no woman no cry
Posté le 12-06-2006 à 11:30:24  profilanswer
 

En fait, je pense qu'elle est bien formatée. C'est surement un problème à cause du varchar mais je ne trouve pas d'autres moyens pour utiliser une variable dans un order by donc je suis obligé de l'utiliser.
J'ai tester avec une requête simple mais cela ne fonctionne pas.
 
DECLARE @Str varchar(1000)
DECLARE @d datetime
set @d ='18/02/2005'
Select @Str ='SELECT * FROM matable WHERE date> '+@d
exec (@Str)
GO
 
par contre sans utiliser de varchar cela fonctionne
 
DECLARE @d datetime
set @d ='18/02/2005'
SELECT * FROM matable WHERE date> @d
GO


Message édité par oggo le 12-06-2006 à 11:37:05
n°1386606
chapi
Downgradé
Posté le 13-06-2006 à 15:31:59  profilanswer
 

oggo a écrit :

Bonjour, j'ai une procédure stockée dans laquelle je passe un parametre date de type DATETIME.
Je dois utiliser un varchar pour ma requête car j'ai un parametre orderBy et SQLServer n'accepte pas des variables dans un order by..Mais cela me pose probleme lorsque je veux également utiliser le paramètre date.
-> Erreur de syntaxe lors de la conversion d'une valeur datetime à partir d'une chaine de caracteres
Je précise que cela fonctionne tb lorsque je n'utilise pas le paramètre orderBy et donc en utilisant une requête sans passer par le varchar. J'ai également utiliser cast, convert, etc je suis à cours d'idée malheureusement.
Auriez vous une solution? merci d'avance

 

CREATE PROCEDURE recherche @date datetime, @orderBy varchar(20) AS
DECLARE @tri varchar(50)
DECLARE @Str varchar(1000)
set @tri = ' ORDER BY '+@orderBy
Select @Str ='SELECT * FROM matable WHERE date > '+@date + @tri
exec (@Str)
GO

  



  


Ce n'est pas très joli, mais bon....  ça marche    :)    

 

CREATE PROCEDURE recherche @date varchar(10), @orderBy varchar(20) AS

 

DECLARE @tri varchar(50)
DECLARE @Str varchar(1000)
set @tri = ' ORDER BY '+@orderBy
Select @Str ='SELECT * FROM matable WHERE date  >  cast(''' + @date + ''' as smalldatetime)' + @tri
exec (@Str)

 

GO

 

Attention à bien respecter les apostrophes     :)

Message cité 1 fois
Message édité par chapi le 13-06-2006 à 15:34:30
n°1386616
Elmoricq
Modérateur
Posté le 13-06-2006 à 15:37:56  profilanswer
 

Lorsque tu as fait le convert(), tu as pensé à ajouter les guillemets ?
 
Genre :  
 

CREATE PROCEDURE recherche @date datetime, @orderBy varchar(20) AS
DECLARE @tri varchar(50)
DECLARE @Str varchar(1000)
set @tri = ' ORDER BY '+@orderBy
Select @Str ='SELECT * FROM matable WHERE date > " '+convert(varchar(8),@date,112) + ' "  ' + @tri
exec (@Str)
GO

n°1387109
oggo
no woman no cry
Posté le 14-06-2006 à 09:28:03  profilanswer
 

chapi a écrit :

Ce n'est pas très joli, mais bon....  ça marche    :)    
 
CREATE PROCEDURE recherche @date varchar(10), @orderBy varchar(20) AS
 
DECLARE @tri varchar(50)
DECLARE @Str varchar(1000)
set @tri = ' ORDER BY '+@orderBy
Select @Str ='SELECT * FROM matable WHERE date  >  cast(''' + @date + ''' as smalldatetime)' + @tri
exec (@Str)
 
GO

 
Attention à bien respecter les apostrophes     :)


Merci cela marche très bien et ca m'évite d'avoir une procédure stockée beaucoup plus longue...

n°1387111
oggo
no woman no cry
Posté le 14-06-2006 à 09:32:44  profilanswer
 

Elmoricq a écrit :

Lorsque tu as fait le convert(), tu as pensé à ajouter les guillemets ?
 
Genre :  
 

CREATE PROCEDURE recherche @date datetime, @orderBy varchar(20) AS
DECLARE @tri varchar(50)
DECLARE @Str varchar(1000)
set @tri = ' ORDER BY '+@orderBy
Select @Str ='SELECT * FROM matable WHERE date > " '+convert(varchar(8),@date,112) + ' "  ' + @tri
exec (@Str)
GO



J'avais déja essayé avec les guillemets et j'obtiens nom de colonne incorrect '01/01/2004' par ex alors que mes dates sont bien en datetime, pr info j'ai fais un convert(varchar(10),@date,103)...Mais merci quand même.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  SQLServer : Problème de datetime

 

Sujets relatifs
Tout petit problème de regexproblème javabean. jsp à fichier class(liaison??)
Problème de warningsProblème avec le tri dans les colonnes
Problème avec le script prog SquirrelMail...problème de calcul de date automatiquement
Problème opener.location.reloadProblème avec Flash
Probleme avec AJAX et internet explorerProblème d'accès à une base Access via VB6 (erreur 13)
Plus de sujets relatifs à : SQLServer : Problème de datetime


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR