сравнивая переменные даты и времени - PullRequest
0 голосов
/ 06 марта 2012

Как сравнить переменную datetime, переданную в процедуру сохранения, с переменной datetime в таблице.

Например, в моем предложении where значение @paramDate равно 2/10 / 2012

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

когда я исполняю (@sql)

, он не работает, ошибка:

 Conversion failed when converting datetime from character string.

Thx

Ответы [ 3 ]

3 голосов
/ 06 марта 2012
SET @sql = '... WHERE product.RegisteredDate >= ''' 
    + CONVERT(CHAR(8), @paramDate, 112) + ''';';

Если @ParamDate равно NULL, вы, вероятно, можете сделать это:

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
2 голосов
/ 06 марта 2012

Попробуйте это:

CONVERT(varchar, @paramDate, 101)

Смотрите здесь для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/ms187928.aspx

0 голосов
/ 06 марта 2012

Поскольку вы пытаетесь выполнить динамический запрос, вы можете использовать sp_executesql вместо exec, чтобы вы могли использовать параметры в сгенерированном запросе.Вот подробности для sp_executesql .

Например:

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

EXECUTE sp_executesql @sql, N'@dynamicParm DATETIME', @dynamicParm = @paramDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...