2012-03-06 5 views
0

Comment comparer la variable datetime transmise à la procédure store avec la variable datetime dans la table.comparaison de variables datetime

par exemple. Dans mon où la valeur de @paramDate clause est 2/10/2012

set sql = 'WHERE product.RegisteredDate >= ' + @paramDate 

quand j'exec (@sql)

échoue, Erreur:

Conversion failed when converting datetime from character string. 

Thx

+1

Pouvez-vous coller votre code réel. Les extraits que vous avez n'ont aucun sens. – Khan

Répondre

3
SET @sql = '... WHERE product.RegisteredDate >= ''' 
    + CONVERT(CHAR(8), @paramDate, 112) + ''';'; 

Si @ParamDate est NULL vous pouvez probablement le faire:

SET @sql = 'SELECT ...'; 

SET @sql = @sql + COALESCE(' WHERE product.RegisteredDate >= ''' 
    + CONVERT(CHAR(8), @paramDate, 112) + ''';', ''); 

Ou encore:

SET @sql = 'SELECT ...'; 

IF @paramDate IS NOT NULL 
BEGIN 
    SET @sql = @sql + '... WHERE product.RegisteredDate >= ''' 
     + CONVERT(CHAR(8), @paramDate, 112) + ''';'; 
END 
+0

Thx Aaron, Votre syntaxe a fonctionné, pourriez-vous s'il vous plaît m'expliquer ce que le converti fait? CONVERT (CHAR (10), @paramDate, 112)? qu'est-ce que char (10)? 112? merci – Ben

+0

'CHAR' est un type de données. '10' est de 10 caractères. '112' est un style,' YYYYMMDD'. Pour voir ce que cela fait, vous pouvez dire 'SELECT CONVERT (CHAR (10), GETDATE(), 112);'. Et à y penser, il devrait être 'CHAR (8)' (je suis toujours confus entre 112 et 120 (AAAA-MM-JJ) –

+1

thx beaucoup, je ne sais pas si je devrais ouvrir un nouveau ticket, mais Je me demandais si la valeur NULL est passée au sp, comment je passerais la conversion? – Ben

2

Try this :

CONVERT(varchar, @paramDate, 101) 

Voir ici pour plus inf ormation: http://msdn.microsoft.com/en-us/library/ms187928.aspx

+0

Cela ne va pas aider, puisque le problème est que la valeur date doit avoir un délimiteur de chaîne autour d'elle. 101 n'est pas un format sûr à utiliser de toute façon (est-ce 10 février ou 2 octobre?) Et vous devriez toujours spécifier explicitement une longueur lors de la conversion en char/varchar etc –

+0

Ah, je supposais 10 février car c'était plus proche d'aujourd'hui. Mea culpa. –

0

Depuis que vous essayez d'exécuter une requête dynamique, vous pourrait utiliser sp_executesql au lieu de exec pour que vous puissiez utiliser des paramètres dans votre requête générée. Voici les détails pour sp_executesql.

Par exemple:

set @sql = 'WHERE product.RegisteredDate >= @dynamicParm' 

EXECUTE sp_executesql @sql, N'@dynamicParm DATETIME', @dynamicParm = @paramDate 
Questions connexes