CURRENT TIMESTAMP: примеры (SQL)

Функция CURRENT_TIMESTAMP в SQL Server: применение и примеры
Раздел: Даты и времени функции, Дата и время
CURRENT_TIMESTAMP: timestamp

Описание функции CURRENT_TIMESTAMP

Функция CURRENT_TIMESTAMP в Microsoft SQL Server предназначена для получения текущей даты и времени с сервера базы данных. Это стандартная функция языка SQL, не принимающая аргументов. Она возвращает значение типа datetime, которое включает информацию о дате и времени с точностью до 3.33 миллисекунд.

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

Возвращаемое значение базируется на системных часах операционной системы, на которой работает экземпляр SQL Server, и учитывает часовой пояс сервера. Функция является недетерминированной, то есть ее результат меняется при каждом вызове.

Простые примеры вызова

Базовый вызов функции для получения текущей отметки времени.

SELECT CURRENT_TIMESTAMP;
2023-11-21 15:47:32.123

Использование псевдонима для столбца с результатом.

SELECT CURRENT_TIMESTAMP AS ServerDateTime;
2023-11-21 15:47:32.123

Применение функции в выражении для вычисления даты в будущем.

SELECT DATEADD(DAY, 10, CURRENT_TIMESTAMP) AS DateIn10Days;
2023-12-01 15:47:32.123

Похожие функции в MS SQL

GETDATE() — функциональный аналог CURRENT_TIMESTAMP, также возвращает datetime. Различие лишь в синтаксисе: CURRENT_TIMESTAMP соответствует стандарту ANSI SQL.

SYSDATETIME() — возвращает значение с более высокой точностью (тип datetime2, точность до 100 наносекунд). Предпочтительна, когда необходима максимальная точность временной метки.

GETUTCDATE() — возвращает текущее время по UTC (всемирное координированное время). Используется, когда требуется независимое от часового пояса сервера значение.

SYSUTCDATETIME() — комбинация высокой точности и времени UTC (возвращает datetime2).

Распространенные ошибки

Путаница с часовыми поясами. Функция возвращает время сервера, что может привести к неверной логике, если приложение работает в другом поясе.

-- Сервер в UTC+3, а приложение ожидает время в UTC.
-- Неверная фильтрация данных за текущий день UTC.
SELECT * FROM Events
WHERE event_date >= CAST(CURRENT_TIMESTAMP AS DATE);

Использование в вычислениях с разными типами данных без явного приведения. Это может вызвать ошибки или потерю точности.

-- Попытка сложения с целым числом без функции DATEADD
SELECT CURRENT_TIMESTAMP + 1; -- Неявное приведение, работает, но неочевидно.
2023-11-22 15:47:32.123

Использование в качестве значения по умолчанию для колонки типа datetime2 может вызвать предупреждение о несовпадении типов.

CREATE TABLE Example (
    Id INT,
    -- Тип datetime2, а функция возвращает datetime
    LogTime datetime2 DEFAULT CURRENT_TIMESTAMP
);

История изменений

Функция CURRENT_TIMESTAMP не претерпела значительных синтаксических изменений в последних версиях MS SQL Server. Основные нововведения связаны с появлением альтернатив с повышенной точностью (datetime2), начиная с SQL Server 2008.

В SQL Server 2019 и 2022 акцент сместился на улучшение производительности и интеграцию с другими функциями обработки даты и времени, но поведение CURRENT TIMESTAMP осталось прежним для обеспечения обратной совместимости.

Расширенные примеры применения

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

Пример sql
CREATE TABLE Orders (
    OrderID INT PRIMARY KEY IDENTITY,
    ProductName NVARCHAR(100),
    CreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO Orders (ProductName) VALUES ('Телефон');
SELECT * FROM Orders;
OrderID  ProductName  CreatedAt
1        Телефон      2023-11-21 15:47:32.123

Обновление конкретного столбца на основе текущего времени с использованием CURRENT_TIMESTAMP в выражении SET.

Пример sql
UPDATE Users SET LastLogin = CURRENT_TIMESTAMP WHERE UserID = 1;

Создание вычисляемого столбца, который показывает, является ли запись "сегодняшней".

Пример sql
ALTER TABLE News ADD IsToday AS 
CAST(CASE WHEN CAST(CreatedDate AS DATE) = CAST(CURRENT_TIMESTAMP AS DATE) 
THEN 1 ELSE 0 END AS BIT);

Использование в сочетании с функциями форматирования, например, для извлечения только времени.

Пример sql
SELECT CONVERT(TIME, CURRENT_TIMESTAMP) AS CurrentTime;
15:47:32.1234567

Применение в условиях фильтрации для выборки данных за последний час.

Пример sql
SELECT * FROM ServerLog 
WHERE EventTime > DATEADD(HOUR, -1, CURRENT_TIMESTAMP);

Аналоги в других системах

MySQL: Функции NOW() и CURRENT_TIMESTAMP() возвращают дату и время. NOW() часто используется как синоним.

SELECT NOW(); -- или SELECT CURRENT_TIMESTAMP();
2023-11-21 15:47:32

Oracle: CURRENT_TIMESTAMP возвращает значение с временной зоной сессии (тип TIMESTAMP WITH TIME ZONE). SYSDATE возвращает дату и время сервера без временной зоны (тип DATE).

SELECT CURRENT_TIMESTAMP FROM DUAL;
21-NOV-23 15.47.32.123456 +03:00

PostgreSQL: CURRENT_TIMESTAMP и NOW() возвращают отметку времени с часовым поясом (тип TIMESTAMP WITH TIME ZONE).

SELECT CURRENT_TIMESTAMP;
2023-11-21 15:47:32.123456+03

SQLite: Используется функция datetime('now') для получения строки с датой и временем в формате UTC.

SELECT datetime('now');
2023-11-21 12:47:32

MS SQL CURRENT_TIMESTAMP function comments

En
CURRENT TIMESTAMP Returns the current date and time