简体   繁体   English

比较日期时间变量

[英]comparing datetime variables

How do I compare datetime variable passed to the store procedure with datetime variable in the table. 如何将传递给存储过程的datetime变量与表中的datetime变量进行比较。

eg In my where clause @paramDate value is 2/10/2012 例如在我的where子句中@paramDate的值是2/10/2012

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

when I exec(@sql) 当我执行(@sql)

it fails, Error: 失败,错误:

 Conversion failed when converting datetime from character string.

Thx 谢谢

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

If @ParamDate is NULL you can probably do this: 如果@ParamDateNULL ,则可以执行以下操作:

SET @sql = 'SELECT ...';

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

Or even: 甚至:

SET @sql = 'SELECT ...';

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

Try this: 尝试这个:

CONVERT(varchar, @paramDate, 101)

See here for more information: http://msdn.microsoft.com/en-us/library/ms187928.aspx 请参阅此处以获取更多信息: http : //msdn.microsoft.com/zh-cn/library/ms187928.aspx

Since you're trying to execute a dynamic query, you could use sp_executesql instead of exec so that you can use parameters in your generated query. 由于您尝试执行动态查询,因此可以使用sp_executesql代替exec,以便可以在生成的查询中使用参数。 Here are the details for sp_executesql . 这是sp_executesql的详细信息。

For example: 例如:

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM