Во-первых, в SQL Server нет типа BIGINTSET
, возможно, вы имеете в виду BIGINT
, и вам не нужно указывать имя переменной @LocalTimeOffset
дважды.
DECLARE @LocalTimeOffset BIGINT = DATEDIFF(second,GETDATE(),GETUTCDATE());
Длязапрос, там много проблем, сначала вы не можете использовать псевдоним столбца в предложении WHERE
, если вы не используете его в CTE / SubQuery, затем вы можете обратиться к нему по псевдониму.
Во-вторых, вы передаете литеральную строку, преобразуете ее в DATE
, затем добавляете количество секунд, хранящееся в переменной @LocalTimeOffset
, чтобы значение F_DATE
было одинаковым длявсе строки, что делает фильтр в предложении WHERE
бессмысленным.
Кроме того, часть DATEADD(second,F_DATE@LocalTimeOffset,
не соответствует действительности и выдаст ошибку, что означает, что ваш запрос не возвращаетсяпредоставленные вами данные.
Неверное имя столбца'F_DATE@LocalTimeOffset'.
Если мы просто попытаемся исправить предоставленный вами запрос, он будет таким же, как
DECLARE @LocalTimeOffset BIGINT = DATEDIFF(second,GETDATE(),GETUTCDATE());
SELECT DATEADD(second, @LocalTimeOffset, CAST('1970-01-01 00:00:00' AS datetime)) as F_DATE
FROM master..[spt_values];
Итак, что вы пытаетесь отфильтровать здесь, поскольку у вас одинаковое значение в F_DATE
столбец во всех строках?
После того, как вы разместите комментарий и обновления, вы можете сделать как
;WITH CTE AS
(
SELECT
DATEADD(SECOND, F_DATE - @LocalTimeOffset, CAST('1970-01-01 00:00:00' AS datetime)) as F_DATE,
,[F_PART]
,[F_PRCS]
,[F_TEST]
,[F_VALUE]
FROM
Table1
)
SELECT *
FROM CTE
WHERE F_DATE > '2019-05-14 23:45:00' AND F_DATE < '2019-05-16 00:00:00';