SQL Сервер: получить результаты предыдущего дня, используя UNIX отметку времени - PullRequest
0 голосов
/ 05 августа 2020

Используя SQL Server 2016, у меня есть таблица, содержащая столбец DateTime типа INT, который содержит временную метку UNIX. Поэтому, если я хочу получить все строки, где метка времени - вчера, я знаю, что мне нужно проверить, является ли метка времени> = меткой времени для «вчера в 00:00» и <= «вчера в 23:59». </p>

Как я могу сделать это с SQL Server 2016?

Нашел несколько примеров, но они для MySQL. Я нашел этот пример ниже. Но он выдает ошибку, поэтому я, вероятно, неправильно его использую. Или на самом деле это может быть MySQL ...

WHERE [DateTime] <= DATEADD(day, -1, convert(day, GETDATE()))

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 05 августа 2020

Вот мое решение, которое, кажется, работает. Проверил вручную, где я проверил, находилась ли метка времени между 1596513600 и 1596599940, и получил тот же результат из решения ниже:

Функция преобразования метки времени в тип datetime (* настраивается для локального time) :

CREATE FUNCTION dbo.fn_ConvertToDateTime (@Datetime int)
RETURNS DATETIME
AS
BEGIN
    DECLARE @LocalTimeOffset BIGINT
           ,@AdjustedLocalDatetime BIGINT;
    SET @LocalTimeOffset = DATEDIFF(second,GETDATE(),GETUTCDATE())
    SET @AdjustedLocalDatetime = @Datetime - @LocalTimeOffset
    RETURN (SELECT DATEADD(second,@AdjustedLocalDatetime, CAST('1970-01-01 00:00:00' AS datetime)))
END;
GO

SQL Заявление:

SELECT *
FROM dbname.dbo.Tablename
WHERE dbo.fn_ConvertToDateTime([DateTime]) >= dateadd(day,datediff(day,1,GETDATE()),0)
    AND dbo.fn_ConvertToDateTime([DateTime]) < dateadd(day,datediff(day,0,GETDATE()),0)

Результат вывода показывает только строки, содержащие unix метка времени вчера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...