比较日期时间变量

时间:2012-03-06 19:21:01

标签: sql sql-server-2005

如何将传递给存储过程的datetime变量与表中的datetime变量进行比较。

e.g。在我的where子句中@paramDate值是2/10/2012

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

当我执行exec(@sql)

失败,错误:

 Conversion failed when converting datetime from character string.

THX

3 个答案:

答案 0 :(得分:3)

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

如果@ParamDateNULL,您可以这样做:

SET @sql = 'SELECT ...';

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

甚至:

SET @sql = 'SELECT ...';

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

答案 1 :(得分:2)

试试这个:

CONVERT(varchar, @paramDate, 101)

有关更多信息,请参阅此处: http://msdn.microsoft.com/en-us/library/ms187928.aspx

答案 2 :(得分:0)

由于您尝试执行动态查询,因此可以使用sp_executesql而不是exec,以便可以在生成的查询中使用参数。以下是sp_executesql的详细信息。

例如:

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

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