CURRENT TIMESTAMP: примеры (SQL)
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 осталось прежним для обеспечения обратной совместимости.
Расширенные примеры применения
Использование в качестве значения по умолчанию для столбца с автоматической фиксацией времени создания записи.
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.
UPDATE Users SET LastLogin = CURRENT_TIMESTAMP WHERE UserID = 1;Создание вычисляемого столбца, который показывает, является ли запись "сегодняшней".
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);Использование в сочетании с функциями форматирования, например, для извлечения только времени.
SELECT CONVERT(TIME, CURRENT_TIMESTAMP) AS CurrentTime;15:47:32.1234567
Применение в условиях фильтрации для выборки данных за последний час.
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