Определить параметр для поиска по дням DATEADD / datediff - SQL server 2005 - PullRequest
0 голосов
/ 08 марта 2012

Итак, у меня теперь есть группировка значений по их валютам и значениям, которая выявляет значения за последние 30 дней, однако я бы хотел выполнить поиск по дате, в конечном итоге используя параметр из другой таблицы.

;WITH cte AS (SELECT ROW_NUMBER() OVER (ORDER BY date_loaded Asc) AS n, value, 
date_loaded, cast(round(value * 0.0001  / 100 * 0.5 + (value * 0.0001),4)AS dec(12,4)) as buy_rate,
        cast(round(value * 0.0001  / 100 * -0.5 + (value * 0.0001), 4) AS dec(12,4)) as sell_rate 

FROM texchange_rate WHERE source_currency_code = @source_currency_code 
and target_currency_code = @target_currency_code
and date_loaded between dateadd(day, datediff(day, 0 ,getdate())-30, 0) and getdate())

SELECT t2.value, t2.date_loaded, @source_currency_code as source_currency_code,
@target_currency_code as target_currency_code, t2.buy_rate, t2.sell_rate
    FROM cte t2 LEFT JOIN cte t1 ON t2.n = t1.n + 1
    WHERE t2.value <> ISNULL(t1.value, -1)

    order by date_loaded desc

END

Я хочу определить количество дней, в течение которых dateadd ищет в отдельной таблице, возможно ли это?Например,

от

dateadd(day, datediff(day, 0 ,getdate())-30, 0) and getdate())

до

dateadd(day, datediff(day, 0 ,getdate())@dayparameter, 0) and getdate())

Просто, чтобы заставить это работать, я попытался объявить @dayparameter (аналогично здесь - http://msdn.microsoft.com/en-us/library/ms186819%28v=sql.100%29.aspx, хотя это для сервера 2008) при запуске хранимой процедуры и помещении ее в dateadd выдает ошибку

Сообщение 102, уровень 15, состояние 1, процедура proc_getCurrencyHistory, строка 48 Неправильный синтаксис рядом с'@dayparameter'.

Надеюсь, это имеет смысл.

1 Ответ

1 голос
/ 08 марта 2012

Вам все еще нужно выполнить операцию.Если вы хотите передать в -30, то вам нужно добавить, если вы хотите передать в 30, тогда вам нужно вычесть.

Если @dayparameter равно -30:

dateadd(day, datediff(day, 0 ,getdate()) + @dayparameter, 0) and getdate())
-----------------------------------------^ this operator is important

Если @dayparameter равно 30:

dateadd(day, datediff(day, 0 ,getdate()) - @dayparameter, 0) and getdate())
-----------------------------------------^ this operator is still important
...